假设我有两个集合A和B的MongoDB,其中A有一个引用B列表的属性:
A:
{
_id: ObjectId
name : String
itemB : [ObjectId]
}
B:
{
_id: ObjectId
data : String
info : [String]
}
对于给定的A,从B获取所有“数据”会更好:
a)从A读取数组itemB,为每个元素x执行.find({_ id:x})
b)从A读取数组itemB,为数组执行.find({_id:{$ in:[x1,x2,...]}})
或者甚至有更好的方法对此进行建模? 将它分成A和B的原因是B.info可以有很多项,或者B.data可以很长。这意味着将B嵌入A可能会因最大文档大小而导致性能问题。
答案 0 :(得分:0)
最好的方法是将关系存储在“其他方式”中:
A:
{
_id: ObjectId
name : String
}
B:
{
_id: ObjectId
data : String
info : [String]
itemA: ObjectId
}
然后你可以简单地查询:
db.B.find( { itemA: … } );
如果itemA是一个数组,此查询将也:
{
_id: ObjectId
data : String
info : [String]
itemA: [ ObjectId, ObjectId, … ]
}
在MongoDB中,与关系数据库相比,您最终会在另一端存储“外键”。