Node.js mogoose中嵌套文档的不同类型是什么?
在调查mongoose嵌套文档的过程中,我发现它有很多方法Node.js mogoose中嵌套文档的不同类型是什么?,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,在调查mongoose嵌套文档的过程中,我发现它有很多方法 /* Collection : profiles { "name":"terry", "address":{ "zipcode":135090, "city":"seoul", "state":"kyungki" }, "birthday":"1975-03-03", "meta":{
/*
Collection : profiles
{
"name":"terry",
"address":{
"zipcode":135090,
"city":"seoul",
"state":"kyungki"
},
"birthday":"1975-03-03",
"meta":{
"company":"cloud consulting",
"book":"architecture design"
},
"image":{
"data":"xxxxxxx",
"contentType":"image/png"
}
}
*/
var mongoose = require('mongoose');
var fs = require('fs');
mongoose.connect('mongodb://localhost:27017/mydb');
var addressSchema = new mongoose.Schema({
zipcode : Number,
city : String,
state : String
});
var profileSchema = new mongoose.Schema({
name : String,
address : addressSchema,
birthday : Date,
meta : mongoose.Schema.Types.Mixed,
image : {
data : Buffer,
contentsType : String
}
});
var Profile = mongoose.model('profiles',profileSchema);
var Address = mongoose.model('address',addressSchema);
var p = new Profile();
p.name = "terry";
// address
var a = new Address();
a.zipcode = 135090;
a.city = "youngin";
a.state = "Kyungki";
p.address = a;
// birthday
p.birthday = new Date(1970,05,10);
// meta
p.meta = { company : 'cloud consulting', book : 'architecture design'};
// image
p.image.contentsType='image/png';
var buffer = fs.readFileSync('/Users/terry/nick.jpeg');
p.image.data = buffer;
p.save(function(err,silece){
if(err){
cosole.log(err);
return;
}
console.log(p);
});
如您所见,地址、元和图像字段是嵌套的文档。对于地址字段,我在mongoose中创建了addressSchema字段和meta字段,并使用了混合类型。对于image字段,我刚刚在ProfileSchema中定义了嵌套文档
我用了三种不同的方法,但我不知道它们之间有什么区别
你能给我一个提示吗?提前准备好 根据数据库中保存的文档
{ "_id" : ObjectId("56f8dc3de430d672036bf325"), "meta" : { "book" : "architecture design", "company" : "cloud consulting" }, "birthday" : ISODate("1970-06-09T16:00:00Z"), "address" : { "_id" : ObjectId("56f8dc3de430d672036bf326"), "zipcode" : 135090, "city" : "youngin", "state" : "Kyungki" }, "name" : "terry", "image" : { "data" : "test is here...", "contentsType" : "image/png" }, "__v" : 0 }
我们可以看出他们之间的区别
可以在address:addressSchema,
字段中找到一个额外的address
,\id
“address”:{“\u id”:ObjectId(“56F8DC3DE430D67203BF326”),“zipcode”:135090,“city:“youngin”,“state:“Kyungki”}
是纯嵌套文档,在image:{data:Buffer,contentsType:String}
中只定义了字段image
,您可以定义一个“随遇而安”的SchemaType,它的灵活性是在更难维护的情况下进行权衡的。参考meta:mongoose.Schema.Types.Mixed