我查看了 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/