【问题标题】:Search Solution Mongodb lookup and filter fields搜索解决方案 Mongodb 查找和过滤字段
【发布时间】:2020-10-29 18:43:35
【问题描述】:

我正在为我的 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"}
   ]

如您所见,我必须使用其 ObjectID 查找数组“子产品”。 但是,如果我进行正常查找,我也会收到所有其他数组元素。

如何过滤结果以使结果仅是它匹配的子产品数组元素。 与内连接相同。

我的预期结果是:

{"_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"
},

谢谢, 亚历克斯

【问题讨论】:

    标签: mongodb filter lookup


    【解决方案1】:

    您可以使用以下查询:

    db.disp.aggregate([
      {
        "$lookup": {
          "from": "product",
          "let": {
            subprodId: "$subproductId"
          },
          "pipeline": [
            {
              "$unwind": "$subproduct"
            },
            {
              "$match": {
                $expr: {
                  $eq: [
                    "$$subprodId",
                    "$subproduct._id"
                  ]
                }
              }
            }
          ],
          as: "subDetails"
        }
      },
      {
        $unwind: "$subDetails"
      },
      {
        $project: {
          _id: 1,
          productId: 1,
          subproductId: 1,
          subproduct: {
            _id: "$subDetails.subproduct._id",
            title: "$subDetails.subproduct.title"
          }
        }
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多