gpt4 book ai didi

javascript - 如何使用多个 OR 动态构建 MongoDB 查询?

转载 作者:可可西里 更新时间:2023-11-01 10:15:02 24 4
gpt4 key购买 nike

我希望能够使用具有多个 OR 的 Node 动态构建 Mongo 查询。此查询的目的是使用多个搜索词在数据库中执行 AND 搜索。

例如,假设有人想搜索包含单词“dog”和“cereal”的记录。查询只会返回记录中某处包含“狗”和“ 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"}}
]}
]
}

但是,我的 Node 代码不会产生这个。这是我最接近解决这个问题的方法:

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);
});

最好的方法是什么?我是否缺少其他方法?

最佳答案

你很接近。您似乎在重用对象。下面是一些调整后的代码,用于构建您要查找的查询,并在每次 forEach 迭代时重新初始化临时对象:

var regexQueryWrapper = {};
regexQueryWrapper["$and"] = [];

searchTerms.forEach(function(term) {

var wrapper = {"$or": []};

searchFields.forEach(function(field) {
var query = {};
query[field] = {$regex: term, $options: 'i'};
wrapper["$or"].push(query);
});

regexQueryWrapper["$and"].push(wrapper);

});

还有一个使用 map 的替代实现:

var query = {"$and": searchTerms.map(function(term) {

return {"$or": searchFields.map(function(field) {

var o = {};
o[field] = {"$regex": term, "$options": "i"};
return o;

})};

})};

关于javascript - 如何使用多个 OR 动态构建 MongoDB 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45068245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com