Nodejs mogoogleを詳しく説明します.
5161 ワード
前言
Mongooseはnodejs環境下で、mongodbを便利に操作する対象モデルツールです.本文では、解(翻)密(訳)Mongooseプラグインを紹介します.
Schema
最初にSchemaについて話します.Schemaはmongodbのcollectionで、その構造を定義します.
.String(ex:'ABCD')
・Number(ex:123)
.Date(ex:new Date)
・Buffer(ex:new Buffer(0)
.Boolean(ex:false)
・Schma.Types.Mixed(ex:{any:{thing:'ok'})
・Schema.Types.ObjectId(ex:new mono.Types.Object ID)
.Aray(ex:[1,2,3])
・Schma.Types.Decimal 128
.Map(ex:new Map(''key'、'value'))
コードの一部を通して、SchemaをModelに変換できます.model.model(modelName、Schema)
Schema static(静的)方法を与え、上記の例を引き続き使用します.
MongoDBは二級インデックスをサポートしています.mongoogleでは、Schema層にインデックスを設定できます.
以上述べたのは小编が皆さんに绍介したNodejs mongoogleの関连している知识で、皆さんに役に立つことを望んでいます.
Mongooseはnodejs環境下で、mongodbを便利に操作する対象モデルツールです.本文では、解(翻)密(訳)Mongooseプラグインを紹介します.
Schema
最初にSchemaについて話します.Schemaはmongodbのcollectionで、その構造を定義します.
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
SchemaはTypeで使用できます.String(ex:'ABCD')
・Number(ex:123)
.Date(ex:new Date)
・Buffer(ex:new Buffer(0)
.Boolean(ex:false)
・Schma.Types.Mixed(ex:{any:{thing:'ok'})
・Schema.Types.ObjectId(ex:new mono.Types.Object ID)
.Aray(ex:[1,2,3])
・Schma.Types.Decimal 128
.Map(ex:new Map(''key'、'value'))
コードの一部を通して、SchemaをModelに変換できます.model.model(modelName、Schema)
var Blog = mongoose.model('Blog', blogSchema);
Schema方法を付与し、方法をModelに変更すると、方法をModelに与える.
// ,Schema
var animalSchema = new Schema({ name: String, type: String });
// Schema
animalSchema.methods.findSimilarTypes = function(cb) {
return this.model('Animal').find({ type: this.type }, cb);
};
var Animal = mongoose.model('Animal', animalSchema);
var dog = new Animal({ type: 'dog' });
dog.findSimilarTypes(function(err, dogs) {
console.log(dogs); // woof
});
Schema法では矢印関数を使わずに、thisを再結合します.Schema static(静的)方法を与え、上記の例を引き続き使用します.
// , Model
animalSchema.statics.findByName = function(name, cb) {
return this.find({ name: new RegExp(name, 'i') }, cb);
};
var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function(err, animals) {
console.log(animals);
});
Schema索引indexMongoDBは二級インデックスをサポートしています.mongoogleでは、Schema層にインデックスを設定できます.
var animalSchema = new Schema({
name: String,
type: String,
tags: { type: [String], index: true } //
});
animalSchema.index({ name: 1, type: -1 }); //
index(二級索引)を使う時はdisable Mongodbのaut Indexが必要です.
mongoose.connect('mongodb://user:pass@localhost:port/database', { autoIndex: false });
//
mongoose.createConnection('mongodb://user:pass@localhost:port/database', { autoIndex: false });
//
animalSchema.set('autoIndex', false);
//
new Schema({..}, { autoIndex: false });
仮想化
// Schema
var personSchema = new Schema({
name: {
first: String,
last: String
}
});
// Model
var Person = mongoose.model('Person', personSchema);
// Model
var axl = new Person({
name: { first: 'Axl', last: 'Rose' }
});
//1. Person
console.log(axl.name.first + ' ' + axl.name.last); // Axl Rose
//2. , , get
personSchema.virtual('fullName').get(function () {
return this.name.first + ' ' + this.name.last;
});
console.log(axl.fullName); // Axl Rose
エイリアス
var personSchema = new Schema({
n: {
type: String,
// n name,n name
alias: 'name'
}
});
// name n,
var person = new Person({ name: 'Val' });
console.log(person); // { n: 'Val' }
console.log(person.toObject({ virtuals: true })); // { n: 'Val', name: 'Val' }
console.log(person.name); // "Val"
person.name = 'Not Val';
console.log(person); // { n: 'Not Val' }
Model & Documents
増加する
var Tank = mongoose.model('Tank', yourSchema);
var small = new Tank({ size: 'small' });
// save
small.save(function (err) {
if (err) return handleError(err);
// saved!
});
// create
Tank.create({ size: 'small' }, function (err, small) {
if (err) return handleError(err);
// saved!
});
// insertMany/insertOne
Tank.insertMany([{ size: 'small' }], function(err) {
});
削除
//deleteOne deleteMany
Tank.deleteOne({ size: 'large' }, function (err) {
if (err) return handleError(err);
//
});
変更
Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) {
});
// findOneAndUpdate , ,
調べます
// ,find,findById,findOne, where
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
締め括りをつける以上述べたのは小编が皆さんに绍介したNodejs mongoogleの関连している知识で、皆さんに役に立つことを望んでいます.