MongoDb罗盘复合滤镜

MongoDb compass complex filter

我在 mongo 中有一个 collection。 样本单项

{
    "_id": {
        "$oid": "6278dc35b07e447b14feef57"
    },
    "formId": "6278d9f7b07e447b14feef54",
    "formData": {
            "0": {
            "value": "297CSSIB"
        },
        "1": {
            "value": "Alba Gonzalez"
        },
        "2": {
            "value": "Concentrix"
        },
        "3": {
            "value": "San Salvador"
        }
    }
}

现在我想使用 formId 和值 San Salvador 进行过滤。 (其中 formId = "6278d9f7b07e447b14feef54" 并且 formData 的索引 3 值为圣萨尔瓦多)

我找不到任何解决方案请帮忙。

对于当前的文档结构,只有当值 San Salvador 始终出现在索引 3 时才有可能。

在这种情况下,以下查询应该有效:

db.collection.find({
  formId: "6278d9f7b07e447b14feef54",
  "formData.3.value": "San Salvador"
})

但是,我建议您更改文档结构,使 formData 成为一个数组,因为它的键只是索引:

{
    "_id": {
      "$oid": "6278dc35b07e447b14feef57"
    },
    "formId": "6278d9f7b07e447b14feef54",
    "formData": [
      {
        "value": "297CSSIB"
      },
      {
        "value": "Alba Gonzalez"
      },
      {
        "value": "Concentrix"
      },
      {
        "value": "San Salvador"
      }
    ]
  }

通过这种方式,查询可以更通用,而不是特定于索引:

db.collection.find({
  formId: "6278d9f7b07e447b14feef54",
  "formData.value": "San Salvador"
})