搜索解决方案Mongodb查找和筛选字段

搜索解决方案Mongodb查找和筛选字段,mongodb,filter,lookup,Mongodb,Filter,Lookup,我正在为我的MongoDB查找问题寻找一个简单的解决方案 我有两个收藏: 具有以下结构的Disp: {"_id" : ObjectId("5f748869487b4d0013ee50b4"), "productId": ObjectId("5f9a96f85b909923e8530f0c"), "subproductId" ObjectId("5e8b3684a82c2a00134

我正在为我的MongoDB查找问题寻找一个简单的解决方案

我有两个收藏:

具有以下结构的Disp:

   {"_id" : ObjectId("5f748869487b4d0013ee50b4"),
"productId": ObjectId("5f9a96f85b909923e8530f0c"),
"subproductId" ObjectId("5e8b3684a82c2a00134e507a"),
},
{"_id" : ObjectId("5f74870e487b4d0013ee50b3"),
"productId": ObjectId("5f7b4b17e8ec6a00158bb5d8"),
"subproductId" ObjectId("5f78303a82f45e0013afebc1"),
}
{_id: ObjectId("5f9a96f85b909923e8530f0c"),
   subproduct: [ {
        _id:ObjectId("5e8b3684a82c2a00134e507a"),
         title: "Test"
         },
        {_id: ObjectId("5f369a94018c040013c76ede"),
         title: "Test 1"}
      ]},
{_id:ObjectId("5f7b4b17e8ec6a00158bb5d8"),
        subproduct: [ {
             _id: ObjectId("5f7b43efe8ec6a00158bb5cc"),
              title: "Test3"
        }, {
             _id: ObjectId("5f78303a82f45e0013afebc1"),
             title: "Test 4"}
   ]
以及具有以下结构的“集合”产品:

   {"_id" : ObjectId("5f748869487b4d0013ee50b4"),
"productId": ObjectId("5f9a96f85b909923e8530f0c"),
"subproductId" ObjectId("5e8b3684a82c2a00134e507a"),
},
{"_id" : ObjectId("5f74870e487b4d0013ee50b3"),
"productId": ObjectId("5f7b4b17e8ec6a00158bb5d8"),
"subproductId" ObjectId("5f78303a82f45e0013afebc1"),
}
{_id: ObjectId("5f9a96f85b909923e8530f0c"),
   subproduct: [ {
        _id:ObjectId("5e8b3684a82c2a00134e507a"),
         title: "Test"
         },
        {_id: ObjectId("5f369a94018c040013c76ede"),
         title: "Test 1"}
      ]},
{_id:ObjectId("5f7b4b17e8ec6a00158bb5d8"),
        subproduct: [ {
             _id: ObjectId("5f7b43efe8ec6a00158bb5cc"),
              title: "Test3"
        }, {
             _id: ObjectId("5f78303a82f45e0013afebc1"),
             title: "Test 4"}
   ]
如您所见,我必须使用ObjectID查找数组“subproduct”。 但是如果我做一个普通的查找,我也会接收所有其他数组元素

如何过滤结果,使结果仅为其匹配的子管道阵列元素。 与内部联接相同

我的预期结果将是:

{"_id" : ObjectId("5f748869487b4d0013ee50b4"),
"productId": ObjectId("5f9a96f85b909923e8530f0c"),
"subproductId" ObjectId("5e8b3684a82c2a00134e507a"),
"subproduct": {
      _id:ObjectId("5e8b3684a82c2a00134e507a"),
      title: "Test"
},
{"_id" : ObjectId("5f74870e487b4d0013ee50b3"),
"productId": ObjectId("5f7b4b17e8ec6a00158bb5d8"),
"subproductId" ObjectId("5f78303a82f45e0013afebc1"),
},
"subproduct": {
      _id: ObjectId("5f78303a82f45e0013afebc1"),
      title: "Test 4"
},
Thx,
Alex

您可以使用以下查询:

db.disp.aggregate([
{
“$lookup”:{
“发件人”:“产品”,
“让”:{
Subproductd:“$Subproducted”
},
“管道”:[
{
“$unwind”:“$SUBSPRODUCT”
},
{
“$match”:{
$expr:{
$eq:[
“$$已完成”,
“$subproduct.\u id”
]
}
}
}
],
as:“子详细信息”
}
},
{
$展开:“$子详细信息”
},
{
$项目:{
_id:1,
产品编号:1,
次级产品:1,
子管道:{
_id:“$subDetails.subproduct.\u id”,
标题:“$subDetails.subproduct.title”
}
}
}
])