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

MongoDB-在多个字段中查找所有搜索字符串,mongodb,mongodb-query,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" }, {

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

如果我要在此数据中搜索“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" }
我希望它在每个字段中单独搜索每个单词,并返回在任何指定字段中包含每个搜索单词的所有文档

我应该返回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**" }
{{u id:1,名称:“**Java**Hut”,描述:“**咖啡**和蛋糕”},
{u id:2,名称:“汉堡包”,描述:“美食汉堡包”},
{{u id:3,名称:“咖啡店”,描述:“只是咖啡”},
{u id:4,名称:“衣服”,描述:“打折衣服”},
{{u id:5,名称:“爪哇购物”,描述:“印度尼西亚商品小屋”},
{{u id:6,名称:“**爪哇咖啡**”,描述:“商品小屋”},
{id:7,名称:“咖啡店”,描述:“Just**Coffee Java**”

关于如何以有效的方式让Mongo执行它,有什么想法吗?

如果搜索字符串是空格分隔的字符串,$text运算符对每个术语执行逻辑或搜索,并返回包含任何术语的文档

 db.collection.find( { $text: { $search: "java coffee" } } )
查询将返回该集合的任何文档中存在的coffee或java

有关详细信息,请参阅

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

db.test.createIndex({name: 'text', description: 'text'})
然后,要查找在任一字段中同时包含“java”和“coffee”的文档,您可以执行一个查询,并引用这两个词,以要求找到这两个词。引用这些词将它们转换为逻辑和行为,而不是OR

db.test.find({$text: {$search: '"java" "coffee"'}})

谢谢,这对我有用。如果其中一个单词是partial,比如“jav”而不是“java”,它甚至可以工作。你知道有没有一种方法可以让它适用于多个部分词吗?我不希望部分词能够可靠地用于文本搜索,因为它使用词干分析,而不是部分匹配。