Nodejs mogoogleを詳しく説明します.

5161 ワード

前言
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索引index
MongoDBは二級インデックスをサポートしています.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の関连している知识で、皆さんに役に立つことを望んでいます.