mongoose를 사용하면 번거로운 비즈니스 로직을 작성하지 않고도 mongodb 데이터베이스를 더 잘 사용할 수 있습니다.
설치
npm install mongoose
다음을 사용하여 초기화
mongoose를 사용하기 전에 node와 mongodb를 설치해야 합니다. node와 mongodb의 설치 방법은 여기서 논의하지 않습니다.
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() { //这里建立模式和模型 }
빠른 시작
몽구스에서는 모든 데이터가 스키마이고, 각 스키마는 mongodb 컬렉션에 매핑되어 컬렉션 파일 구조를 정의합니다.
//这里建立一个动物的模式,所有动物都拥有这个模式下的所有属性 var animalSchema = new Schema({ name: String, age: Number, });
모델은 스키마에서 정의하는 다양한 생성자입니다. 모델 인스턴스는 다양한 작업을 사용할 수 있습니다.
var animalMode = db.model('Animal', animalSchema);
모델의 인스턴스는 본질적으로 파일이며 이러한 파일을 쉽게 생성하고 수정할 수 있습니다
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); });
스키마
데이터 유형
몽구스의 사용자 정의 데이터 유형을 포함하여 스키마의 모든 데이터 유형입니다
데이터 유형별 활용
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는 몽구스가 맞춤설정한 혼합 유형이므로, 다음 두 가지 정의 형식은 동일합니다.
var animalSchema = new Schema({any: {}}); var animalSchema = new Schema({any: {Schema.Types.Mixed}});
맞춤형 방법
메서드를 스키마에 바인딩할 수 있습니다
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); });
스키마에 정적 메소드를 추가할 수도 있습니다
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); });
색인
mongodb 데이터를 색인화할 수 있습니다. Mongodb는 데이터 검색 및 위치 지정을 향상시키기 위해 복합 색인을 설정해야 합니다
var animalSchema = new Schema({ name: String, age: Number, tags: { age: [String], index: true } // field level }); animalSchema.index({ name: 1, age: -1 }); // schema level
그러나 이러한 종류의 인덱스를 설정하면 성능에 심각한 영향을 미칠 수 있으므로 프로덕션에서는 이를 중지하고 설정 모드에서 자동 인덱스를 false로 설정하여 비활성화하는 것이 좋습니다
animalSchema.set('autoIndex', false); // or new Schema({..}, { autoIndex: false });
모델
ㄷ
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); });
르
//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); });
유
공식문서에서 제공하는 업데이트 기능 Model.update
Model.update(조건, 문서, [옵션], [콜백])
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); });
ㄷ
animalMode.remove({age: 6}, function(err){ if (err) console.log(err); })
기타
//문서 개수 반환
animalMode.count({age: 2}, function(err, cat){ if (err) console.log(err); console.log(cat); })