没有字段名的mongodb查询

标签 mongodb advanced-queuing

我想查询具有包含特定值的字段的所有对象。比如我有两个文档:

{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}

并想获取所有具有值为“apple”的字段的对象,但我不知道该字段的名称。是否可以在 MongoDB 中指定一个查询来实现这一点? (对象中的数字键是子id,对象中的值是长GUID)

最佳答案

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

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

{"123": "apple", "217": "pear", "179": "orange"} 
{"831": "pear", "189": "grapes"} 

你可以这样构造它:

 { tags: [
        { cid: "123", value: "apple" },
        { cid: "217", value: "pear" },
        { cid: "179", value: "orange" },
      ]
    }
   { tags: [
        { cid: "831", value: "pear" },
        { cid: "189", value: "grapes" },
      ]
    }

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

 db.docs.find( {'tags.value': "apple" } )

请注意,此架构允许您为“tags.cid”和“tags.value”字段编制索引,而您的原始架构不允许这样做。

希望对您有所帮助。

-威廉

关于没有字段名的mongodb查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901151/

相关文章:

node.js - 在 mongodb-native NodeJS 中为集群使用单个连接池与为每个子进程使用多个连接池

mysql - MySQL表在MongoDB中的正确实现?

java - 通过 JMS 发送的 XML 消息 (JAXB) 为空

go - 聆听高级 Oracle 队列 (AQ)

MongoDB:文档大小会影响查询性能吗?

javascript - Meteor 服务器在请求缓慢时自行重启

javascript - 从本地 Apostrope cms 代码连接到 Mongo Atlas

java - MessageListener 未监听 Oracle 队列中的消息

java - Java 中的 Oracle 高级队列

oracle - Oracle 高级队列中不相关消息的选择性出队