Maison  >  Article  >  interface Web  >  Analyse de cas à l'aide de Nodejs mangoose (avec code)

Analyse de cas à l'aide de Nodejs mangoose (avec code)

php中世界最好的语言
php中世界最好的语言original
2018-06-12 09:49:461521parcourir

Cette fois, je vais vous apporter une analyse de cas d'utilisation de Nodejs mongoose (avec code). Quelles sont les précautions d'utilisation de Nodejs mangoose ? Ce qui suit est un cas pratique, jetons un coup d'oeil.

Avant-propos

Mongoose est un outil de modèle d'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
  }
 });

Types de schéma disponibles :

.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']]))

On peut Convertissez le schéma en modèle via un morceau de code : mongoose.model(modelName,Schema)

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

attribue la méthode Schema Lorsque la méthode est convertie en modèle, la méthode sera affectée au modèle

<.>
//创建一个变量,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
});
Dans la méthode Schema, n'utilisez pas la fonction flèche, cela la reliera.

attribue la méthode Schema static (statique), nous continuons à utiliser l'exemple ci-dessus :

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

Index d'index de schéma

MongoDB prend en charge les index secondaires Dans Mongoose, nous pouvons définir l'index au niveau de la couche Schema.

var animalSchema = new Schema({
  name: String,
  type: String,
  tags: { type: [String], index: true } // 声明在字段层
});
animalSchema.index({ name: 1, type: -1 }); // 声明在
Lors de l'utilisation d'un index (index secondaire), n'oubliez pas de désactiver l'autoIndex de Mongodb.

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

Virtualisation

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

Ajouté

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

Supprimé

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

Changer

Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) {
});
// findOneAndUpdate 查找出相应的数据,修改,并返还给程序

Vérifier

// 查提供了多种方式,find,findById,findOne,和where
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
Je crois que vous l'avez maîtrisé après avoir lu le cas dans cet article Pour des méthodes plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Quelles sont les précautions à prendre pour utiliser Dom avec Angular2

Comment utiliser le socket vue+slot dans le projet

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!

Déclaration:
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