Home Web Front-end JS Tutorial Deep dive into mongoose tools in Nodejs

Deep dive into mongoose tools in Nodejs

Jun 07, 2021 am 11:16 AM
nodejs

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!

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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

The difference between nodejs and vuejs The difference between nodejs and vuejs Apr 21, 2024 am 04:17 AM

Node.js is a server-side JavaScript runtime, while Vue.js is a client-side JavaScript framework for creating interactive user interfaces. Node.js is used for server-side development, such as back-end service API development and data processing, while Vue.js is used for client-side development, such as single-page applications and responsive user interfaces.

Is nodejs a backend framework? Is nodejs a backend framework? Apr 21, 2024 am 05:09 AM

Node.js can be used as a backend framework as it offers features such as high performance, scalability, cross-platform support, rich ecosystem, and ease of development.

How to connect nodejs to mysql database How to connect nodejs to mysql database Apr 21, 2024 am 06:13 AM

To connect to a MySQL database, you need to follow these steps: Install the mysql2 driver. Use mysql2.createConnection() to create a connection object that contains the host address, port, username, password, and database name. Use connection.query() to perform queries. Finally use connection.end() to end the connection.

What are the global variables in nodejs What are the global variables in nodejs Apr 21, 2024 am 04:54 AM

The following global variables exist in Node.js: Global object: global Core module: process, console, require Runtime environment variables: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

What is the difference between npm and npm.cmd files in the nodejs installation directory? What is the difference between npm and npm.cmd files in the nodejs installation directory? Apr 21, 2024 am 05:18 AM

There are two npm-related files in the Node.js installation directory: npm and npm.cmd. The differences are as follows: different extensions: npm is an executable file, and npm.cmd is a command window shortcut. Windows users: npm.cmd can be used from the command prompt, npm can only be run from the command line. Compatibility: npm.cmd is specific to Windows systems, npm is available cross-platform. Usage recommendations: Windows users use npm.cmd, other operating systems use npm.

Is there a big difference between nodejs and java? Is there a big difference between nodejs and java? Apr 21, 2024 am 06:12 AM

The main differences between Node.js and Java are design and features: Event-driven vs. thread-driven: Node.js is event-driven and Java is thread-driven. Single-threaded vs. multi-threaded: Node.js uses a single-threaded event loop, and Java uses a multi-threaded architecture. Runtime environment: Node.js runs on the V8 JavaScript engine, while Java runs on the JVM. Syntax: Node.js uses JavaScript syntax, while Java uses Java syntax. Purpose: Node.js is suitable for I/O-intensive tasks, while Java is suitable for large enterprise applications.

Is nodejs a back-end development language? Is nodejs a back-end development language? Apr 21, 2024 am 05:09 AM

Yes, Node.js is a backend development language. It is used for back-end development, including handling server-side business logic, managing database connections, and providing APIs.

Which one to choose between nodejs and java? Which one to choose between nodejs and java? Apr 21, 2024 am 04:40 AM

Node.js and Java each have their pros and cons in web development, and the choice depends on project requirements. Node.js excels in real-time applications, rapid development, and microservices architecture, while Java excels in enterprise-grade support, performance, and security.

See all articles