mongodb 如何使用mongo终端查询hashmap数据

9njqaruj  于 2023-02-08  发布在  Go
关注(0)|答案(1)|浏览(229)

我在mongodb中有以以下格式存储的数据..请帮助我了解如何编写查询来查找数据库是否有存储在其中一个表中的特定ID
数据的结构如下:

{
    "name": "abc",
    "linked_data": {
      "sheet 1": [
        "7d387e05d3f8180a",
        "8534sfjog904395"
      ],
      "sheet 2": [
        "7d387e05d3f8180a",
        "54647sgdsevey67r34"
      ]
    }
  }

例如,如果id“8534sfjog904395”与“sheet 1”Map..则它应返回id与工作表Map的数据。我在查询中传递id,并希望在linked_data中查找,然后查找所有工作表

kb5ga3dv

kb5ga3dv1#

使用动态值作为字段名被认为是一种反模式,会给查询带来不必要的复杂性。然而,您可以使用$objectToArraylinked_data转换为k-v元组数组。$filter以仅获得您想要的工作表。最后,使用$arrayToObject恢复为原始结构

db.collection.aggregate([
  {
    "$set": {
      "linked_data": {
        "$objectToArray": "$linked_data"
      }
    }
  },
  {
    $set: {
      linked_data: {
        "$filter": {
          "input": "$linked_data",
          "as": "ld",
          "cond": {
            "$in": [
              "8534sfjog904395",
              "$$ld.v"
            ]
          }
        }
      }
    }
  },
  {
    "$set": {
      "linked_data": {
        "$arrayToObject": "$linked_data"
      }
    }
  },
  {
    $match: {
      linked_data: {
        $ne: {}
      }
    }
  }
])

Mongo Playground

相关问题