使用一组键在MongoDB中查找文档

时间:2014-01-07 13:43:42

标签: mongodb

假设我有两个集合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 个答案:

答案 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中,与关系数据库相比,您最终会在另一端存储“外键”。