2014-07-01 2 views
0

저장하기 전에 모든 모델에 uuid를 추가하려고합니다. 내가 말할 수있는 한, 내 코드는 (this page의 첫 번째 예제를 기반으로) 올바르지 만 속성은 저장되지 않습니다.몽구스 미들웨어 수정 작업

var mongoose = require("mongoose"); 
var uuid = require("node-uuid"); 

var siteSchema = mongoose.Schema({ 
    email: { 
     type: String, 
     unique: true, 
     sparse: true 
    } 
}); 

siteSchema.pre("save", function(next) { 
    console.log(this); 
    this.uuid = uuid.v4(); 
    console.log(this); 
    next(); 
}); 

var siteModel = module.exports = mongoose.model("Site", siteSchema); 

답변

2

저장하려는 속성이 스키마에 존재하지 않으므로 속성을 정의하거나 엄격하게 지정해야합니다.

그래서 하나의 방법 무슨 일을 : UUID에 대한 다른 필드가

var mongoose = require("mongoose"), 
    Schema = mongoose.Schema, 
    uuid = require("node-uuid"); 


mongoose.connect('mongodb://localhost/test'); 

var demoSchema = new Schema({ 
    uuid: String, 
}); 

demoSchema.pre("save", function(next) { 
    this.uuid = uuid.v4(); 
    next(); 
}); 


var Demo = mongoose.model("Demo", demoSchema, "demo"); 

var demo = new Demo(); 

demo.save(function(err,demo) { 

    console.log(demo); 

}); 

을 :

{ __v: 0, 
    uuid: 'b55db0de-7b0e-4d15-854c-90bb49bd1463', 
    _id: 53b242a760ca971e30a9349c } 

또는 대신 mongoose-uuid 플러그인을 사용할 수 있습니다

var mongoose = require("mongoose"), 
    Schema = mongoose.Schema, 
    uuid = require("mongoose-uuid"); 


mongoose.connect('mongodb://localhost/test'); 

var demoSchema = new Schema({},{ _id: false}); 

demoSchema.plugin(uuid.plugin, "Demo"); 

var Demo = mongoose.model("Demo", demoSchema, "demo"); 

var demo = new Demo(); 

demo.save(function(err,demo) { 

    console.log(demo); 

}); 

장소는 uuid가 _id 필드에 있습니다 :

{ __v: 0, _id: '82bc7a00-00dd-11e4-a63a-4373a4cdbe8c' } 
+0

굉장합니다. 그게 정확히 뭔지. ID로 uuids를 사용하는 데 단점이 있는지 궁금합니다. – giodamelio

+0

@giodamelio 랜덤 타입의 경우, 디폴트의 ObjectId 형의 들여 쓰기 목적과 같이, 「모노톤」이 아닙니다. 그러면 무작위 배분이 당신이 쫓고있는 것 인 경우 샤딩에 다시 임의성이 유용 할 수 있습니다. 이 두 가지 모두 키의 문자열로 구현되며 이점/방해가 될 수도 아닐 수도 있습니다. 그것은 당신의 사건에 달려 있습니다. –