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