Mongo中使用ObjectId进行lookup join不起作用?

7

针对集合(collections):

 data:
 { "_id" : ObjectId("57a"), "rep" : ObjectId("570"), "label" : "pat" }
 { "_id" : ObjectId("57b"), "rep" : ObjectId("571"), "label" : "pat" }

 rep:
 { "_id" : ObjectId("570") }
 { "_id" : ObjectId("571") }

查询

db.rep.aggregate([{ $lookup: 
   {from: "data", localField:"rep", foreignField:"_id", as: "in_common" }
}])

返回了一个空集。

查询应该产生两行结果。

我该如何修复这个问题?

1个回答

13

您需要按照下面的方式修改您的查询:

db.data.aggregate([ { $lookup: { from: "rep", localField: "rep", foreignField: "_id", as: "in_common" } } ])

此查询将为您生成两个记录。

未获取记录的原因: 在您的集合中,您没有将data._id映射到rep._id,但是您已经将rep._id映射到data.rep

https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

希望它有所帮助!


2
谢谢,它有效。当插入实际的ObjectId值时,查询似乎返回了太多的值。所使用的查询是:db.data.aggregate([ { $lookup: {from: "rep", localField:"ObjectId(_id)", foreignField:"ObjectId(rep)", as: "incommon"} } ] )。在"ObjectId(_id)"与"ObjectId(rep)"之间进行搜索是否格式正确? - user2002858
1
太好了,请将问题标记为已解决,以便对其他遇到相同问题的人有所帮助。 - Clement Amarnath
感谢您的解释和字段映射。 - silentsudo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接