没有字段名称的mongodb查询

mma*_*oti 2 advanced-queuing mongodb

我想查询具有包含特定值的字段的所有对象.例如,我有两个文件:

{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
Run Code Online (Sandbox Code Playgroud)

并且想要获得具有值为"apple"的字段的所有对象,但我不知道该字段的名称.是否可以在MongoDB中指定查询来实现此目的?(对象中的数字键是子ID,对象中的值是长GUID)

Wil*_*m Z 5

不幸的是,MongoDB不支持任何查询具有特定值的所有字段的方法.现有的Jira票证要求此增强功能:https://jira.mongodb.org/browse/SERVER-1248.随意评论,投票或关注该票.

与此同时,处理此问题的常用方法是更改​​MongoDB架构.对于您的示例,您将更改现有架构:

{"123": "apple", "217": "pear", "179": "orange"} 
{"831": "pear", "189": "grapes"} 
Run Code Online (Sandbox Code Playgroud)

你可能会这样构造它:

 { tags: [
        { cid: "123", value: "apple" },
        { cid: "217", value: "pear" },
        { cid: "179", value: "orange" },
      ]
    }
   { tags: [
        { cid: "831", value: "pear" },
        { cid: "189", value: "grapes" },
      ]
    }
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您可以执行以下查询以查找所有需要的文档:

 db.docs.find( {'tags.value': "apple" } )
Run Code Online (Sandbox Code Playgroud)

请注意,此架构允许您索引"tags.cid"和"tags.value"字段,而原始架构则不会.

我希望这有帮助.

-威廉