MongoDB-在多个字段中查找所有搜索字符串词

Ken*_*all 3 mongodb mongodb-query

我正在尝试跨多个字段查找搜索字符串中的所有单词。例如:

如果我要在此数据中搜索“ java coffee ”:

 { _id: 1, name: "Java Hut", description: "Coffee and cakes" },
 { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
 { _id: 3, name: "Coffee Shop", description: "Just coffee" },
 { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
 { _id: 5, name: "Java Shopping", description: "Indonesian goods Hut" },
 { _id: 6, name: "Java Coffee", description: "goods Hut" },
 { _id: 7, name: "Coffee Shop", description: "Just coffee Java" }
Run Code Online (Sandbox Code Playgroud)

我希望它在每个字段中分别搜索每个单词,并返回在任何指定字段中具有每个搜索单词的所有文档。

由于这些匹配,我应该获得ID 1、6和7作为结果:

{ _id: 1, name: "**Java** Hut", description: "**Coffee** and cakes" },<br>
{ _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },<br>
{ _id: 3, name: "Coffee Shop", description: "Just coffee" },<br>
{ _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },<br>
{ _id: 5, name: "Java Shopping", description: "Indonesian goods Hut" },<br>
{ _id: 6, name: "**Java Coffee**", description: "goods Hut" },<br>
{ _id: 7, name: "Coffee Shop", description: "Just **coffee Java**" }
Run Code Online (Sandbox Code Playgroud)

关于如何以有效的方式实现Mongo的实现的任何想法?

Joh*_*yHK 5

您可以向集合中添加text索引,以在多个字段中启用文本搜索。在这种情况下:

db.test.createIndex({name: 'text', description: 'text'})
Run Code Online (Sandbox Code Playgroud)

然后,要在任一字段中查找同时包含“ java”和“ coffee”的文档,可以执行文本搜索查询,并用两个引号引起来,要求找到两个词。引用单词会将它们转换为调用逻辑AND行为而不是OR的短语

db.test.find({$text: {$search: '"java" "coffee"'}})
Run Code Online (Sandbox Code Playgroud)