【发布时间】:2017-07-12 22:04:47
【问题描述】:
我希望能够使用具有多个 OR 的 Node 动态构建 Mongo 查询。此查询的重点是在数据库中使用多个搜索词进行 AND 搜索。
例如,假设有人想要搜索包含单词“dog”和“cereal”的记录。该查询只会返回在记录中某处包含“dog”和“cereal”的记录(即搜索词可以出现在不同的列中)。
我知道查询最终应该是这样的:
query = {
$and: [
{$or: [
{col1: {$regex: "first", $options: "i"}},
{col2: {$regex: "first", $options: "i"}}
]},
{$or: [
{col1: {$regex: "second", $options: "i"}},
{col2: {$regex: "second", $options: "i"}}
]}
]
}
但是,我的节点代码不会产生这个。 这是我最接近解决这个问题的方法:
var regexQueryWrapper = {};
regexQueryWrapper["$and"] = [];
var wrapper = {};
wrapper["$or"] = [];
var query = {};
searchTerms.forEach(function(term) {
searchFields.forEach(function(field) {
query[field] = {$regex: term, $options: 'i'};
wrapper["$or"].push(query);
});
regexQueryWrapper["$and"].push(wrapper);
});
最好的方法是什么?我是否缺少其他方法?
【问题讨论】:
-
您是否考虑过为此使用 MongoDB 的 text search?您的用例听起来很合适。
-
@JohnnyHK 我有并且我很想使用它。但是,它不喜欢搜索应用程序的要求。
标签: javascript node.js mongodb mongodb-query