Home > Web Front-end > JS Tutorial > body text

Deep dive into mongoose tools in Nodejs

青灯夜游
Release: 2021-06-09 18:42:35
forward
2409 people have browsed it

This article will give you a detailed introduction to Nodejs mongoose. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.

Deep dive into mongoose tools in Nodejs

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
    }
  });
Copy after login

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 to convert Schema into Model: mongoose.model(modelName,Schema)

var Blog = mongoose.model('Blog', blogSchema);
Copy after login

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);
};
Copy after login
var Animal = mongoose.model('Animal', animalSchema);
var dog = new Animal({ type: 'dog' });

dog.findSimilarTypes(function(err, dogs) {
    console.log(dogs); // woof
});
Copy after login

in the Schema method. Here, don't use arrow functions, which will rebind this.

Give 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);
});
Copy after login

Schema index index

MongoDB supports secondary indexes, in mongoose, we can index Set at the Schema layer.

var animalSchema = new Schema({
    name: String,
    type: String,
    tags: { type: [String], index: true } // 声明在字段层
});

animalSchema.index({ name: 1, type: -1 }); // 声明在schema层
Copy after login

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 });
Copy after login

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
Copy after login

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' }
Copy after login

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) {

});
Copy after login

Delete

//deleteOne 或者 deleteMany
Tank.deleteOne({ size: 'large' }, function (err) {
  if (err) return handleError(err);
  // 只删掉符合项的第一条
});
Copy after login

Change

Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) {

});

// findOneAndUpdate 查找出相应的数据,修改,并返还给程序
Copy after login

Check

// 查提供了多种方式,find,findById,findOne,和where
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
Copy after login

For more programming-related knowledge, please visit: Programming Video! !

The above is the detailed content of Deep dive into mongoose tools in Nodejs. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template