使用$ lookup从数组中查找id到数组

时间:2016-05-29 17:00:52

标签: mongodb lookup

我知道我们必须在使用查找之前解开数组,但是在执行搜索之前有没有办法在其他文档上展开数组?现在我只是得到包含值的完整数组。

作为替代解决方案,您将如何过滤整个数组,以便它只保留我在每个文档上引用的值?

编辑: 作为一个例子

COLLECTION AAA
{
array:[
   {_id:01},
   {_id:02}
]
}

COLLECTION BBB
{
array:[
   {AAA_id:01},
   {AAA_id:02}
]
}

在这个例子中,我将使用此代码来检索链接的值:

db.BBB.aggregate(
{$unwind: '$array'},
    {
      $lookup:
        {
          from: "AAA",
          localField: "array.AAA_id",
          foreignField: "array._id",
          as: "linked"
        }
   }
)

但我会得到这样的东西:

{
array:[
   {AAA_id:01}
]
linked:[
   {_id:01},
   {_id:02}
]
}
{
array:[
   {AAA_id:02}
]
linked:[
   {_id:01},
   {_id:02}
]
}

而不是:

{
array:[
   {AAA_id:01}
]
linked:[
   {_id:01}
]
}
{
array:[
   {AAA_id:02}
]
linked:[
   {_id:02}
]
}

1 个答案:

答案 0 :(得分:2)

$ lookup检索具有匹配条件的完整文档。 在这种特殊情况下,为了摆脱不必要的元素,你可以在$ project管道中使用$ filter,类似于:

$project : {
    _id : 1, //list all field here
    linked: { 
        $filter : {
            input : "$linked",
            as : "item",
            cond : {
                $eq : ["$$item._id", "$$array.AAA_id"]
            }
        }
    }
},

AFAIK还没有别的办法处理。