查找字符串中数组中所有出现的元素

时间:2019-07-09 22:33:17

标签: javascript mongodb mongoose

我的文件类似于以下格式:

img1

用户执行搜索时,他们将一个数组发送到后端。此数组包含至少一个元素。

说他们将['javascript']发送到后端。有没有一种查询MongoDB的方法来查找包含单词javascript的文档?

我尝试过类似的事情,

db.find({ body: { $all:['javascript'] } });

,但这仅在body也是数组的情况下有效。有什么办法做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以将以竖线分隔的正则​​表达式与关键字列表一起使用,如下所示:

const subStrings = ["javascript", "php", "python"];
const regex = subStrings.join("|");


 db.find ({
   body: { $regex: regex, $options: 'i' }
});

答案 1 :(得分:0)

使用$regex运算符并将其包含在字符串中的正则表达式传递给它:

db.find({ body: { $regex: ".*javascript.*" }});

您也可以这样做:

db.find({ body: /.*javascript.*/ });
db.find({ body: /javascript/ });

答案 2 :(得分:0)

首先,您需要在要搜索的字段上创建文本索引。如果要搜索所有字段

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

或者,如果您只想包含几个特定字段,则除了

db.collection.createIndex( { title: "text", body: "text" } )

您也可以添加重量,例如。在您的情况下,标题的权重应大于说明。

然后您可以进行如下搜索:

db.collection.find( { $text: { $search: "java javascript python" } } )

这将搜索包含任何或所有这些单词的所有文档。