>  기사  >  웹 프론트엔드  >  Node.js MongoDB 드라이버 Mongoose 기본 사용법 tutorial_node.js

Node.js MongoDB 드라이버 Mongoose 기본 사용법 tutorial_node.js

WBOY
WBOY원래의
2016-05-16 15:12:431752검색

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

스키마
데이터 유형

몽구스의 사용자 정의 데이터 유형을 포함하여 스키마의 모든 데이터 유형입니다

  • 문자열
  • 번호
  • 날짜
  • 버퍼
  • 부울
  • 혼합
  • 객체 ID
  • 배열

데이터 유형별 활용

 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(조건, 문서, [옵션], [콜백])

  • 조건 업데이트 조건
  • 문서 업데이트된 콘텐츠
  • 옵션 업데이트 옵션
  • 안전(부울) 안전 모드, 기본 옵션, 값은 true
  • upsert(부울) 조건이 일치하지 않을 때 새 문서를 생성할지 여부, 기본값은 false
  • multi(부울) 여러 파일을 업데이트할지 여부, 기본값은 false
  • 엄격(부울) 엄격 모드, 단 하나의 데이터만 업데이트
  • 덮어쓰기(부울) 데이터 덮어쓰기, 기본값은 false
  • 콜백
  • 데이터 업데이트 중 오류가 발생하면 반환되는 err 값
  • numberAffected (아직 모르겠습니다)
  • rawResponse 영향을 받은 행 수
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);
})

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.