This time I will bring you a case analysis of using Nodejs mongoose (with code). What are the precautions for using Nodejs mongoose? The following is a practical case, let's take a look.
Preface
Mongoose is an object model tool for convenient operation of mongodb in the nodejs environment. This article introduces the decryption (translation) Mongoose plug-in.
Schema
#We will talk about Schema at the beginning. A Schema corresponds to the collection of mongodb (equivalent to SQL table), and defines its 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 } });
Schema Available Types:
.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']]))
We can pass a section Code, convert Schema into Model: mongoose.model(modelName,Schema)
var Blog = mongoose.model('Blog', blogSchema);
is assigned to the Schema method. When the method is converted to Model, the method will be assigned to the 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 });
in the Schema method. Here, don't use arrow functions, which will rebind this.
Assign Schema static (static) method, we continue to use the above example:
//赋予静态方法,可以再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 index
MongoDB Supports secondary indexes. In mongoose, we can set the index at the Schema layer.
var animalSchema = new Schema({ name: String, type: String, tags: { type: [String], index: true } // 声明在字段层 }); animalSchema.index({ name: 1, type: -1 }); // 声明在
When using index (secondary index), remember to disable Mongodb's autoIndex.
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 });
Virtualization
// 声明一个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
Add
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) { });
Delete
//deleteOne 或者 deleteMany Tank.deleteOne({ size: 'large' }, function (err) { if (err) return handleError(err); // 只删掉符合项的第一条 });
Change
Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) { }); // findOneAndUpdate 查找出相应的数据,修改,并返还给程序
check
// 查提供了多种方式,find,findById,findOne,和where Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website !
Recommended reading:
What are the precautions for using Dom with Angular2
How to use the vue slot socket in the project
The above is the detailed content of Case analysis using Nodejs mongoose (with code). For more information, please follow other related articles on the PHP Chinese website!