猫鼬中嵌套文档的不同类型是啥?
Posted
技术标签:
【中文标题】猫鼬中嵌套文档的不同类型是啥?【英文标题】:What is difference type of nested document in mogoose?猫鼬中嵌套文档的不同类型是什么? 【发布时间】:2016-07-15 09:16:30 【问题描述】:在调查猫鼬嵌套文档时,我发现它有多种方式。
/*
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);
);
如您所见,地址、元数据和图像字段是嵌套文档。对于地址字段,我创建了 addressSchema 字段和元字段,我在猫鼬中使用了混合类型。对于图像字段,我刚刚在 ProfileSchema 中定义了嵌套文档。
我使用了 3 种不同的方式,但我不知道它们之间有什么区别。
请您给我一个提示吗?提前谢谢。
【问题讨论】:
Mongoose subdocuments vs nested schema的可能重复 【参考方案1】:根据db中保存的文档
"_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,
类似于sub-doc,另外一个_id
可以在address
字段中找到,"address" : "_id" : ObjectId("56f8dc3de430d672036bf326"), "zipcode" : 135090, "city" : "youngin", "state" : "Kyungki"
image : data : Buffer, contentsType : String
是纯嵌套文档,image
中只有定义的字段。
meta : mongoose.Schema.Types.Mixed
,您可以定义一个“随心所欲”的 SchemaType,它的灵活性是以更难维护为代价的。参考doc。
【讨论】:
以上是关于猫鼬中嵌套文档的不同类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章