在 MongoDB 中搜索任何字段的值而不显式命名它

标签 search mongodb field

我查看了 MongoDB 文档并在 Google 上搜索了这个问题,但找不到合适的答案。所以,这就是我要找的。 假设我有一个包含这样元素的集合:

{
   "foo" : "bar",
   "test" : "test",
   "key" : "value",
}

我想要实现的是通过在所有(可能除了有限多个 ;-) )字段中搜索来找到一个元素。换句话说:给定一个查询,我不知道应该在哪个字段中找到查询。

在我看来是这样的

db.things.find({_ANY_ : "bar"}) 

会给我示例元素。

感谢您的帮助。

最佳答案

要对所有字段进行文本搜索,首先必须在所有字段上创建文本索引。

作为 mongodb documentation表示,“要允许对包含字符串内容的所有字段进行文本搜索,请使用通配符说明符 ($**) 来索引包含字符串内容的所有字段。”

如果您在 mongo shell 中工作(通过调用“mongo”从命令行执行),那么您可以使用此命令执行此操作,其中“collection”是您想要的 db 中集合的名称使用。

db.collection.createIndex({ "$**": "text" },{ name: "TextIndex" })

第二个对象,即 {name:"TextIndex"} , 是可选的...您实际上不需要为索引命名,因为每个集合只能有一个文本索引(一次...您可以删除索引并根据需要创建新索引)。

在所有字段上创建文本索引后,您可以使用以下查询对象进行简单的文本搜索: { $text : { $search: <your string> } }

所以,如果您正在编写一个 javascript 函数,您可能会执行以下操作:

var cursor = db.collection(<collection_name>).find({ $text: { $search: <your string> } });

有关控制搜索的各种方法的更多信息,请参阅有关文本搜索的 mongodb 文档 here

关于在 MongoDB 中搜索任何字段的值而不显式命名它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790819/

相关文章:

带有条件group by语句的MongoDB查询

mongodb - 如何处理 MongoDB 中的过时连接

C# - 自动属性和返回支持字段之间的区别?

django - Django:来自自模型实例的字段的默认值

javascript - 左侧赋值无效

hibernate - 异步搜索

java - 如何使用 Spring 正确连接到 MongoDB?

search - 在 Elasticsearch 中让读取优先于写入

asp.net-mvc - 如何在 MVC View 中对值求和?

java - 在 JavaFX 中的 ListView 中过滤项目