假设我有两个集合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可能会因最大文档大小而导致性能问题 .
1 回答
最好的方法是将关系存储在“其他方式”周围:
A:
B:
然后你可以简单地查询:
如果itemA是一个数组,则此查询将 also 工作:
在MongoDB中,与关系数据库相比,您最终会在另一端存储“外键” .