Home >Web Front-end >JS Tutorial >Case analysis using Nodejs mongoose (with code)

Case analysis using Nodejs mongoose (with code)

php中世界最好的语言
php中世界最好的语言Original
2018-06-12 09:49:461538browse

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!

Statement:
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