没有字段名称的mongodb查询

时间:2012-06-05 16:29:28

标签: mongodb advanced-queuing

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

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

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

2 个答案:

答案 0 :(得分:5)

不幸的是,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”字段,而原始架构不会这样做。

我希望这会有所帮助。

-William

答案 1 :(得分:0)

您可以在所有字段上使用全文索引。

use dbname
db.collectionname.ensureIndex(
                           { "$**": "text" },
                           { name: "TextIndex" }
                         )

然后搜索:

DB db = mongoClient.getDB("dbname");
DBCollection coll = db.getCollection("collectionname");
BasicDBObject query = new BasicDBObject();
            query.append("$text", new BasicDBObject("$search", searchstring));
            DBCursor cursor = coll.find(query);