【问题标题】:Mongo lookup join on objectid not working?对象ID上的Mongo查找加入不起作用?
【发布时间】:2016-08-09 00:56:27
【问题描述】:

对于收藏:

 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" }
}])

产生一个空集。

查询应该产生包含两行的结果。

我该如何解决这个问题?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您需要修改您的查询,如下所示

    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>
         }
    }
    

    希望对你有帮助!

    【讨论】:

    • 谢谢,这行得通。插入实际 ObjectId 值时,查询似乎返回了太多值。使用的查询是: db.data.aggregate([ { $lookup: {from: "rep", localField:"ObjectId(_id)", foreignField:"ObjectId(rep)", as: "incommon"} } ] )针对“ObjectId(rep)”搜索“ObjectId(_id)”的格式是否正确?
    • 太好了,请将问题标记为已回答,以便对面临相同问题的其他人有所帮助。
    • 感谢您的解释和字段映射。
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2018-12-06
    • 2016-01-16
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多