Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不带字段名的mongodb查询_Mongodb_Advanced Queuing - Fatal编程技术网

不带字段名的mongodb查询

不带字段名的mongodb查询,mongodb,advanced-queuing,Mongodb,Advanced Queuing,我想查询所有具有包含特定值的字段的对象。例如,我有两个文档: {"123": "apple", "217": "pear", "179": "orange"} {"831": "pear", "189": "grapes"} db.docs.find( {'tags.value': "apple" } ) 我想得到所有有一个值为“apple”的字段的对象,但我不知道该字段的名称。是否可以在MongoDB中指定一个查询来实现这一点?(对象中的数字键是子ID,对象中的值是长GUID)不幸的是,

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

{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
 db.docs.find( {'tags.value': "apple" } )

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

不幸的是,MongoDB不支持使用特定值查询所有字段的任何方法。现有Jira票证请求此增强:。请随意评论、投票或关注这张票

同时,通常的处理方法是更改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" },
      ]
    }
完成此操作后,可以执行以下查询以查找所有所需文档:

{"123": "apple", "217": "pear", "179": "orange"}
{"831": "pear", "189": "grapes"}
 db.docs.find( {'tags.value': "apple" } )
请注意,此模式允许您索引“tags.cid”和“tags.value”字段,而您的原始模式没有索引这些字段

我希望这有帮助


-William

您可以对所有字段使用全文索引

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);