首页 文章

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

提问于
浏览
0

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

    最好的方法是将关系存储在“其他方式”周围:

    A:

    {
       _id: ObjectId
       name : String
     }
    

    B:

    {
       _id: ObjectId
       data : String 
       info : [String]
       itemA: ObjectId
     }
    

    然后你可以简单地查询:

    db.B.find( { itemA: … } );
    

    如果itemA是一个数组,则此查询将 also 工作:

    {
       _id: ObjectId
       data : String 
       info : [String]
       itemA: [ ObjectId, ObjectId, … ]
     }
    

    在MongoDB中,与关系数据库相比,您最终会在另一端存储“外键” .

相关问题