我的文件类似于以下格式:
用户执行搜索时,他们将一个数组发送到后端。此数组包含至少一个元素。
说他们将['javascript']
发送到后端。有没有一种查询MongoDB的方法来查找包含单词javascript
的文档?
我尝试过类似的事情,
db.find({ body: { $all:['javascript'] } });
,但这仅在body
也是数组的情况下有效。有什么办法做到这一点?
答案 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" } } )
这将搜索包含任何或所有这些单词的所有文档。