Maison > interface Web > js tutoriel > Plongez en profondeur dans les outils mangouste dans Nodejs

Plongez en profondeur dans les outils mangouste dans Nodejs

青灯夜游
Libérer: 2021-06-09 18:42:35
avant
2417 Les gens l'ont consulté

Cet article vous donnera une introduction détaillée à Nodejs mangoose. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Plongez en profondeur dans les outils mangouste dans Nodejs

Mongoose est un outil de modèle objet pour un fonctionnement pratique de mongodb dans l'environnement nodejs. Cet article présente le plug-in de décryptage (traduction) Mongoose.

Schéma

Nous parlerons de Schéma au début Un Schéma correspond à la collection de mongodb (équivalent à la table SQL), et définit sa 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
    }
  });
Copier après la connexion

Types de schéma disponibles :

.String (ex : 'ABCD')

.Number (ex : 123)

.Date (ex : nouvelle Date)

.Buffer (ex : new Buffer(0))

.Boolean (ex : false)

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

.Schema.Types.ObjectId (ex:new mangoose.Types.ObjectID)

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

.Schema.Types.Decimal128

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

On peut passer un section Code, convertissez le schéma en modèle : mongoose.model(modelName,Schema)

var Blog = mongoose.model('Blog', blogSchema);
Copier après la connexion

est attribué à la méthode Schema Lorsque la méthode est convertie en modèle, la méthode sera affectée à 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);
};
Copier après la connexion
var Animal = mongoose.model('Animal', animalSchema);
var dog = new Animal({ type: 'dog' });

dog.findSimilarTypes(function(err, dogs) {
    console.log(dogs); // woof
});
Copier après la connexion
<🎜. > dans la méthode Schema Ici, n'utilisez pas de fonctions fléchées, qui relieraient cela.

Assign Schema static (static), nous continuons à utiliser l'exemple ci-dessus :

//赋予静态方法,可以再Model不实例化的情况下调用
animalSchema.statics.findByName = function(name, cb) {
    return this.find({ name: new RegExp(name, &#39;i&#39;) }, cb);
};

var Animal = mongoose.model(&#39;Animal&#39;, animalSchema);
Animal.findByName(&#39;fido&#39;, function(err, animals) {
    console.log(animals);
});
Copier après la connexion

Schema index index

MongoDB prend en charge les index secondaires, en mangouste, nous pouvons indexer Set au niveau de la couche Schéma.

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

animalSchema.index({ name: 1, type: -1 }); // 声明在schema层
Copier après la connexion

Lors de l'utilisation d'un index (index secondaire), n'oubliez pas de désactiver l'autoIndex de Mongodb.

mongoose.connect(&#39;mongodb://user:pass@localhost:port/database&#39;, { autoIndex: false });
  // 或者
mongoose.createConnection(&#39;mongodb://user:pass@localhost:port/database&#39;, { autoIndex: false });
  // 或者
animalSchema.set(&#39;autoIndex&#39;, false);
  // 或者
new Schema({..}, { autoIndex: false });
Copier après la connexion

Virtualisation

// 声明一个Schema
var personSchema = new Schema({
    name: {
      first: String,
      last: String
    }
});

// 转成Model
var Person = mongoose.model(&#39;Person&#39;, personSchema);

// 实例化Model
var axl = new Person({
    name: { first: &#39;Axl&#39;, last: &#39;Rose&#39; }
});

//1.如果我们想要打印Person的姓名
console.log(axl.name.first + &#39; &#39; + axl.name.last); // Axl Rose

//2.使用虚拟化,我们声明一个虚拟字段,然后通过get给其赋值
personSchema.virtual(&#39;fullName&#39;).get(function () {
  return this.name.first + &#39; &#39; + this.name.last;
});
console.log(axl.fullName); // Axl Rose
Copier après la connexion

Alias

var personSchema = new Schema({
  n: {
    type: String,
    // 给予 n 别名 name,n与name指向同一个值
    alias: &#39;name&#39;
  }
});

// 修改name同样修改n,方向一样
var person = new Person({ name: &#39;Val&#39; });
console.log(person); // { n: &#39;Val&#39; }
console.log(person.toObject({ virtuals: true })); // { n: &#39;Val&#39;, name: &#39;Val&#39; }
console.log(person.name); // "Val"

person.name = &#39;Not Val&#39;;
console.log(person); // { n: &#39;Not Val&#39; }
Copier après la connexion

Modèle et documents

Ajouter

var Tank = mongoose.model(&#39;Tank&#39;, yourSchema);

var small = new Tank({ size: &#39;small&#39; });
//使用save的方法
small.save(function (err) {
  if (err) return handleError(err);
  // saved!
});

// 或者 使用create

Tank.create({ size: &#39;small&#39; }, function (err, small) {
  if (err) return handleError(err);
  // saved!
});

// 或者 使用insertMany/insertOne
Tank.insertMany([{ size: &#39;small&#39; }], function(err) {

});
Copier après la connexion

Supprimer

//deleteOne 或者 deleteMany
Tank.deleteOne({ size: &#39;large&#39; }, function (err) {
  if (err) return handleError(err);
  // 只删掉符合项的第一条
});
Copier après la connexion

Modifier

Tank.updateOne({ size: &#39;large&#39; }, { name: &#39;T-90&#39; }, function(err, res) {

});

// findOneAndUpdate 查找出相应的数据,修改,并返还给程序
Copier après la connexion

Vérifiez

// 查提供了多种方式,find,findById,findOne,和where
Tank.find({ size: &#39;small&#39; }).where(&#39;createdDate&#39;).gt(oneYearAgo).exec(callback);
Copier après la connexion
Pour plus de connaissances liées à la programmation, veuillez visiter :

Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal