Maison > Article > interface Web > Analyse de cas à l'aide de Nodejs mangoose (avec code)
Cette fois, je vais vous apporter une analyse de cas d'utilisation de Nodejs mongoose (avec code). Quelles sont les précautions d'utilisation de Nodejs mangoose ? Ce qui suit est un cas pratique, jetons un coup d'oeil.
Avant-propos
Mongoose est un outil de modèle d'objet pour un fonctionnement pratique de mongodb dans l'environnement nodejs. Cet article présente le plug-in de décryptage (traduction) Mongoose.
Schéma
Nous parlerons de Schéma au début Un Schéma correspond à la collection de mongodb (équivalent à la table SQL), et définit sa structure.
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 } });
Types de schéma disponibles :
.String (ex : 'ABCD')
.Number (ex : 123)
.Date ( ex : new Date)
.Buffer (ex : new Buffer(0))
.Boolean (ex : false)
.Schema.Types.Mixed (ex : {any:{thing:'ok'}})
.Schema.Types.ObjectId (ex:new mongoose.Types.ObjectID)
.Array (ex:[1,2, 3])
.Schema.Types.Decimal128
.Map (ex : new Map([['key','value']]))
On peut Convertissez le schéma en modèle via un morceau de code : mongoose.model(modelName,Schema)
var Blog = mongoose.model('Blog', blogSchema);
attribue la méthode Schema Lorsque la méthode est convertie en modèle, la méthode sera affectée au modèle
<.>//创建一个变量,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 });Dans la méthode Schema, n'utilisez pas la fonction flèche, cela la reliera. attribue la méthode Schema static (statique), nous continuons à utiliser l'exemple ci-dessus :
//赋予静态方法,可以再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); });
Index d'index de schéma
MongoDB prend en charge les index secondaires Dans Mongoose, nous pouvons définir l'index au niveau de la couche Schema.var animalSchema = new Schema({ name: String, type: String, tags: { type: [String], index: true } // 声明在字段层 }); animalSchema.index({ name: 1, type: -1 }); // 声明在Lors de l'utilisation d'un index (index secondaire), n'oubliez pas de désactiver l'autoIndex de Mongodb.
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 });
Virtualisation
// 声明一个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
Alias
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
Ajouté
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) { });
Supprimé
//deleteOne 或者 deleteMany Tank.deleteOne({ size: 'large' }, function (err) { if (err) return handleError(err); // 只删掉符合项的第一条 });
Changer
Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) { }); // findOneAndUpdate 查找出相应的数据,修改,并返还给程序
Vérifier
// 查提供了多种方式,find,findById,findOne,和where Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);Je crois que vous l'avez maîtrisé après avoir lu le cas dans cet article Pour des méthodes plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php ! Lecture recommandée :
Quelles sont les précautions à prendre pour utiliser Dom avec Angular2
Comment utiliser le socket vue+slot dans le projet
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!