mongodb 具有多个条件和 id 的聚合查找

mongodb aggregation lookup with multiple conditions and ids

拥有以下藏品和数据

db.a.insert([
  { "_id" : ObjectId("5b56989172ebcb00105e8f41"), "items" : [{id:ObjectId("5b56989172ebcb00105e8f41"), "instock" : 120}]},
  { "_id" : ObjectId("5b56989172ebcb00105e8f42"), "items" : [{id:ObjectId("5b56989172ebcb00105e8f42"), "instock" : 120}] },
  { "_id" : ObjectId("5b56989172ebcb00105e8f43"), "items" : [{ObjectId("5b56989172ebcb00105e8f43"), "instock" : 80}] }
])

db.b.insert([
  { "_id" : ObjectId("5b56989172ebcb00105e8f41")},
  { "_id" : ObjectId("5b56989172ebcb00105e8f42")},
  { "_id" : ObjectId("5b56989172ebcb00105e8f43")},
  { "_id" : ObjectId("5b56989172ebcb00105e8f44")},
  { "_id" : ObjectId("5b56989172ebcb00105e8f45")}
])

执行查找聚合,如

db.b.aggregate([
   {
      $lookup:
         {
           from: "b",
           let: { bId: "$_id", qty: 100 },
           pipeline: [
              { $match:
                 { $expr:
                    { $and:
                       [
                         { $eq: [ "$items.id",  "$$bId" ] },
                         { $gte: [ "$instock", "$$qty" ] }
                       ]
                    }
                 }
              }
           ],
           as: "a"
         }
    }
])

不会在预期的查找操作中带来任何结果。使用 ObjectId 作为比较有什么限制吗?在官方文档中对此没有任何说明,它与任何其他类型的数据类型(如字符串

)一起工作就像一个魅力

我不确定这是否是 mongodb 中的错误,但查询仅在先添加 $unwind 阶段后才有效。

db.b.aggregate([
   {
      $lookup:
         {
           from: "a",
           let: { bId: "$_id", qty: 100 },
           pipeline: [
           {    
             $unwind: {
               path: "$items"
             }
           },
           { $match:
              { $expr:
                        { $and:
                            [
                                { $eq: [ "$items.id",  "$$bId" ] },
                                { $gte: [ "$items.instock",  "$$qty" ] },
                            ]
                        }
                    }
                }
           ],
           as: "a"
         }
    }
]);

注意:Join Conditions and Uncorrelated Sub-queries 是在 mongo 3.6

中添加的