Heim >Web-Frontend >js-Tutorial >Tauchen Sie tief in die Mungo-Tools in Nodejs ein

Tauchen Sie tief in die Mungo-Tools in Nodejs ein

青灯夜游
青灯夜游nach vorne
2021-06-07 11:16:422444Durchsuche

Dieser Artikel gibt Ihnen eine detaillierte Einführung in Nodejs Mungo. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Tauchen Sie tief in die Mungo-Tools in Nodejs ein

Mongoose ist ein Objektmodelltool für den bequemen Betrieb von Mongodb in der NodeJS-Umgebung. In diesem Artikel wird das Mongoose-Plug-In für die Entschlüsselung (Übersetzung) vorgestellt.

Schema

Beginnen Sie damit, über Schema zu sprechen. Ein Schema entspricht der Mongodb-Sammlung (entspricht einer SQL-Tabelle) und definiert deren Struktur.

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
    }
  });

Verfügbare Schematypen:

.String (z. B. 'ABCD')

.Number (z. B. 123)

.Datum (z. B. neues Datum)

.Puffer (z. B. neuer Puffer (0))

.Boolean (z. B. false)

.Schema.Types.Mixed (z. B. {any:{thing:'ok'}})

.Schema.Types.ObjectId (z. B. new mongoose.Types.ObjectID)

.Array (ex:[1,2,3])

.Schema.Types.Decimal128

.Map (ex: new Map([['key','value']]))

Wir können Konvertieren Sie das Schema über einen Code in ein Modell: mongoose.model(modelName,Schema)

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

Weisen Sie die Schema-Methode zu. Wenn die Methode in ein Modell konvertiert wird, wird die Methode dem Modell übergeben

//创建一个变量,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 der Schema-Methode. Verwenden Sie keine Pfeilfunktionen, da dies eine erneute Bindung bewirkt.

Geben Sie Schema eine statische (statische) Methode an. Wir verwenden weiterhin das obige Beispiel:

//赋予静态方法,可以再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-Indexindex

MongoDB unterstützt sekundäre Indizes. In Mongoose können wir den Index auf der Schemaebene festlegen.

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

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

Wenn Sie einen Index (Sekundärindex) verwenden, denken Sie daran, den AutoIndex von Mongodb zu deaktivieren.

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 });

Virtualisierung

// 声明一个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' }

Modell und Dokumente

Hinzufügen

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

});

Löschen

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

Ändern

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

});

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

Überprüfen

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

Für weitere Programmierung Wissen, besuchen Sie bitte: Programmiervideo! !

Das obige ist der detaillierte Inhalt vonTauchen Sie tief in die Mungo-Tools in Nodejs ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen