如何在 MongoDB 中查询具有未知键的 json 数组?

How to query a json array with unknown key in MongoDB?

有一个 MongoDB 数据库,其中的文档都是这样的:

{
    "_id": {
        "$oid": "62371a3c8200184f3b49d9e7"
    },
    "po_id": "123456",
    "po_detail": [{
        "10065": {
            "price": "123.45",
            "product": "P1"
        }
    }, {
        "11121": {
            "price": "678.90",
            "product": "P2"
        }
    }]
}

我想按“产品”(例如“P1”或“P2”)查找文档,但数组中的键(例如“10065”或“11121”)未知。

如何在MongoDB中查询这样的文档(使用pymongo)?

谢谢!

按“产品”(例如“P1”或“P2”)查找文档不是很清楚。一般来说,数据模型很差,你应该考虑 re-design.

查询可能如下所示:

db.collection.aggregate([
  { $unwind: "$po_detail" },
  {
    $set: {
      po_detail: { $first: { $objectToArray: "$po_detail" } }
    }
  },
  { $match: { "po_detail.v.product": "P1" } },
  { $set: { po_detail: [ "$po_detail" ] } },
  { $set: { po_detail: { $arrayToObject: "$po_detail" } } }
])

Mongo Playground