Maison >interface Web >js tutoriel >Pilote Node.js MongoDB Utilisation de base de Mongoose tutoriel_node.js

Pilote Node.js MongoDB Utilisation de base de Mongoose tutoriel_node.js

WBOY
WBOYoriginal
2016-05-16 15:12:431783parcourir

L'utilisation de mangouste nous permet de mieux utiliser la base de données mongodb sans écrire de logique métier lourde.

Installation

npm install mongoose

Initialiser en utilisant
Avant d'utiliser mongoose, vous devez installer node et mongodb. Les méthodes d'installation de node et mongodb ne sont pas abordées ici.

 var mongoose = require("mongoose");
 var Schema = mongoose.Schema;
 var db = mongoose.connection;
 mongoose.connect('mongodb://localhost/animal');
 db.on('error', console.error);
 db.once('open', function() {
  //这里建立模式和模型
 }

Démarrage rapide
Dans Mongoose, toutes les données sont un schéma, et chaque schéma est mappé à une collection mongodb et définit la structure du fichier de collection.

 //这里建立一个动物的模式,所有动物都拥有这个模式下的所有属性
 var animalSchema = new Schema({
  name: String,
  age: Number,
 });

Un modèle est un constructeur diversifié que nous définissons à partir du schéma. Les instances d'un modèle peuvent utiliser de nombreuses opérations. Toutes les créations et récupérations de documents sont gérées par le modèle

.
 var animalMode = db.model('Animal', animalSchema);

L'instance du modèle est essentiellement un fichier, et nous pouvons facilement créer et modifier de tels fichiers

 var cat = new animalMode({
  name: 'catName',
  age: '7', //这里依然使用字符串,mongoose会自动转换类型
  });

 cat.save(function(err, thor) {
  if (err) return console.log(err);
  console.log(thor);
 });
 //或者可以使用create
 //cat.create(function(err, thor) {
 // if (err) return console.log(err);
 // console.log(thor);
 //});

 //执行查找
 animalMode.find(function(err, people){
  if(err) console.log(err);
  console.log(people);
 });
 //查找符合条件数据
 animalMode.findOne({title: 'catName'}, function(err, cat){
  if(err) console.log(err);
  console.log(cat);
 });

Schéma
Type de données

Ce sont tous les types de données dans Schema, y ​​compris les types de données personnalisés de Mongoose

  • Chaîne
  • Numéro
  • Date
  • Tampon
  • Booléen
  • Mixte
  • ObjectId
  • Tableau

Utilisation de chaque type de données

 var animalMode = mongoose.model('Animal', schema);

 var cat = new animalMode;
 cat.name = 'Statue of Liberty'    //String
 cat.age = '7';        //Number
 cat.updated = new Date;      //Date
 cat.binary = new Buffer(0);     //Buffer
 cat.living = false;       //Boolean
 cat.mixed = { any: { thing: 'i want' } }; //Mixed    
 cat._someId = new mongoose.Types.ObjectId; //ObjectId
 cat.ofString.push("strings!");    //Array

Mixed est un type mixte personnalisé par mangouste. Étant donné que Mixed ne définit pas de contenu spécifique, il peut être utilisé avec {}. Les deux formes de définition suivantes sont équivalentes.

 var animalSchema = new Schema({any: {}});
 var animalSchema = new Schema({any: {Schema.Types.Mixed}});

Méthode personnalisée

Vous pouvez lier des méthodes au schéma

 var animalSchema = new Schema({
  name: String,
  age: Number,
 });

 animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ name: this.name }, cb);
 }

 var animalMode = db.model('Animal', animalSchema);

 cat.findSimilarTypes(function(err, cat){
  if(err) console.log(err);
  console.log(cat);
 });

Vous pouvez également ajouter des méthodes statiques au schéma

 animalSchema.statics.findByName = function (name, cb) {
  return this.find({ name: new RegExp(name, 'i') }, cb);
 }
 var animalMode = db.model('Animal', animalSchema);

 animalMode.findByName('catName', function (err, animals) {
  console.log(animals);
 });

Index

Nous pouvons indexer les données Mongodb. Mongodb prend en charge les index secondaires Afin d'améliorer la recherche et le positionnement des données, il est nécessaire d'établir un index composite

.
 var animalSchema = new Schema({
  name: String,
  age: Number,
  tags: { age: [String], index: true } // field level
 });

 animalSchema.index({ name: 1, age: -1 }); // schema level

Cependant, l'établissement de ce type d'index peut avoir un impact significatif sur les performances. Il est recommandé de l'arrêter en production et de définir l'indexation automatique en mode configuration sur false pour la désactiver

 animalSchema.set('autoIndex', false);
 // or
 new Schema({..}, { autoIndex: false });

Modèle
C

 cat.save(function(err, thor) {
  if (err) return console.log(err);
  console.log(thor);
 });
 //或者可以使用create
 cat.create(function(err, thor) {
  if (err) return console.log(err);
  console.log(thor);
 });

R

//find
animalMode.find(function(err, cat){
 if (err) console.log(err);
 console.log(cat);
})

//findOne
animalMode.findOne({name: 'catName'}, function(err, cat){
 if (err) console.log(err);
 console.log(cat);
})

//findByID
//与 findOne 相同,但它接收文档的 _id 作为参数,返回单个文档。_id //可以是字符串或 ObjectId 对象。
animalMode.findById(id, function(err, adventure){
 if (err) consoel.log(err);
 console.log(adventure);
});

//where
//查询数据类型是字符串时,可支持正则
animalMode.where('age', '2').exec(function(err, cat){
 if (err) console.log(err);
 console.log(cat);
});

animalMode
 .where('age').gte(1).lte(10)
 .where('name', 'catName')
 .exec(function(err, cat){
  if (err) console.log(err);
  console.log(cat);
 });

U
La fonction de mise à jour Model.update fournie par la documentation officielle

Model.update(conditions, doc, [options], [callback])

  • conditions de mise à jour des conditions
  • contenu mis à jour du doc
  • option de mise à jour
  • mode sans échec sécurisé (booléen), option par défaut, la valeur est vraie
  • upsert (boolean) S'il faut créer un nouveau document lorsque les conditions ne correspondent pas, la valeur par défaut est false
  • multi (booléen) s'il faut mettre à jour plusieurs fichiers, la valeur par défaut est false
  • mode strict (booléen), ne met à jour qu'une seule donnée
  • écraser (booléen) les données d'écrasement, la valeur par défaut est fausse
  • rappel
  • valeur d'erreur renvoyée en cas d'erreur lors de la mise à jour des données
  • numéroAffecté (je ne sais pas encore)
  • rawResponse Nombre de lignes affectées
animalMode.update({name: 'catName'}, {age: '6'}, {multi : true}, function(err, numberAffected, raw){
 if (err) return console.log(err);
 console.log('The number of updated documents was %d', numberAffected);
 console.log('The raw response from Mongo was ', raw);
});

D

animalMode.remove({age: 6}, function(err){
 if (err) console.log(err);
})

Autres
//Renvoyer le nombre de documents

animalMode.count({age: 2}, function(err, cat){
 if (err) console.log(err);
 console.log(cat);
})

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