我有一个叫做公司的集合
{
_id: ObjectId("1111"),
name: 'ABc COrp',
address: {
Street: '124 Main Street'
city: 'San Diego'
state: 'California'
zip: "92115"
}
vendor: [{
vendor_id: ObjectId("1234")
}, {
vendor_id: ObjectId("4567"
}]
}
}
// vendor collection
{
_id: ObjectId("1234"),
name: 'foodCA company',
company: [company_id: ObjectId('11111')]
}
现在我有一些供应商,如食品,办公用品等供公司使用。供应商和公司有很多关系。
当我使用嵌入式文档结构时,我可以使用dbref(http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef)吗?
谢谢!我是mongoDB的新手。我为自己的无知道歉。
答案 0 :(得分:1)
基于official documentation有两种选择:
<强> DBREF 强>
请记住:
要解析DBRefs,您的应用程序必须执行其他查询 返回引用的文档。许多驱动程序都有辅助方法 自动形成DBRef的查询。司机1没有 自动将DBRef解析为文档。
由于这些人(1,2,3而我自己并没有看到使用它们的意义。此外,dbRef还允许您不仅引用另一个集合,还可以引用另一个数据库。 (我从来没有发现它有用,但这并不代表其他人没有用。)
手动参考:
我更喜欢这种方法,因为它非常简单易读。你有公司和供应商,所以
{
companyID : 1,
vendors: [1, 3, 19]
}
请注意,没有理由将每个供应商作为对象放置。有少量不同的供应商,你可以做: { companyID:1, vendors_food:[1,3], vendors_drinks:[17] }
许多不同类型的供应商,而不是您可以做的事情:
{
companyID : 1,
vendors: [{
'type' : 'drink',
'id' : 18
},{
'type' : 'food',
'id' : 3
}],
}
在找到贵公司[1, 6, 29]
的供应商后,您可以将它们合并,只执行一次数据库请求,以$in查找有关所有这些供应商的信息:
db.vendors.find({
'_id': {
$in: [1, 6, 29]
}
});
请注意,这只是我喜欢使用mongo。