Menggunakan mongoose membolehkan kami menggunakan pangkalan data mongodb dengan lebih baik tanpa menulis logik perniagaan yang menyusahkan.
Pemasangan
npm install mongoose
Mulakan menggunakan
Sebelum menggunakan mongoose, anda perlu memasang nod dan mongodb Kaedah pemasangan nod dan mongodb tidak dibincangkan di sini.
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() { //这里建立模式和模型 }
Permulaan Pantas
Dalam mongoose, semua data ialah skema dan setiap skema dipetakan ke koleksi mongodb dan mentakrifkan struktur fail koleksi.
//这里建立一个动物的模式,所有动物都拥有这个模式下的所有属性 var animalSchema = new Schema({ name: String, age: Number, });
Model ialah pembina pelbagai yang kami takrifkan daripada Skema model boleh menggunakan banyak operasi Semua pembuatan dan pengambilan dokumen dikendalikan oleh model
var animalMode = db.model('Animal', animalSchema);
Instance model pada asasnya ialah fail dan kami boleh membuat dan mengubah suai fail sedemikian dengan mudah
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); });
Skema
Jenis data
Ini semua jenis data dalam Skema, termasuk jenis data tersuai mongoose
Penggunaan setiap jenis data
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 ialah jenis campuran yang disesuaikan oleh mongoose Kerana Mixed tidak mentakrifkan kandungan tertentu, ia boleh digunakan dengan {}.
var animalSchema = new Schema({any: {}}); var animalSchema = new Schema({any: {Schema.Types.Mixed}});
Kaedah tersuai
Anda boleh mengikat kaedah kepada Skema
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); });
Anda juga boleh menambah kaedah statik pada Skema
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); });
Indeks
Kami boleh mengindeks data mongodb menyokong indeks sekunder Untuk meningkatkan carian dan kedudukan data, adalah perlu untuk mewujudkan indeks komposit
var animalSchema = new Schema({ name: String, age: Number, tags: { age: [String], index: true } // field level }); animalSchema.index({ name: 1, age: -1 }); // schema level
Walau bagaimanapun, penubuhan indeks jenis ini boleh menyebabkan kesan prestasi yang ketara Adalah disyorkan untuk menghentikannya dalam pengeluaran dan menetapkan pengindeksan automatik dalam mod persediaan kepada palsu untuk melumpuhkan
.animalSchema.set('autoIndex', false); // or new Schema({..}, { autoIndex: false });
Model
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
Fungsi kemas kini Model.update disediakan oleh dokumentasi rasmi
Model.update(syarat, dokumen, [pilihan], [panggilan balik])
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); })
Lain-lain
//Kembalikan bilangan dokumen
animalMode.count({age: 2}, function(err, cat){ if (err) console.log(err); console.log(cat); })