使用MongoDB查询时不需要字段名。

3

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

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

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

2个回答

6
很遗憾,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
您可以在所有字段上使用全文索引。
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接