使用 MongoDB "$in"运算符的 Javascript 查询生成器

标签 javascript arrays mongodb mlab

所以我设置了一个查询生成器,它根据用户与前端数据过滤区域的交互来构建查询,该区域包含很多单选按钮和下拉框等。类似于 eBay 上提供的数据过滤功能他们的网站。

到目前为止我的查询生成器:

app.post('/user/test',function(req, res) {

var query = {};


if (req.body.region){
    query.region = req.body.region
    console.log(query.region)
}

if(req.body.sector){
    query.sector = req.body.sector
    console.log(query.sector)
}

if(req.body.client){
    query.client = req.body.client
    console.log(query.client)
}

   Project.find(query, function(err, project){
    if (err){
        res.send(err);
    }
    console.log(project);
    res.json(project);
});
});

现在上面的效果很好。我可以在任何情况下发送过滤选项,它会带回所需的结果。例如,我只能发送区域名称,它会给我属于该区域的所有数据,或者我可以发送区域名称、扇区名称,它会进一步过滤与发送的区域和扇区名称匹配的数据等等。

问题:

现在我的数据库包含一组数据,例如:

words: ["book", "table", "pen"]

数据库中的每个对象都会有这个数组。因此,如果数据库中有 100 个对象,每个对象都有一个,其中的“words”数组将具有不同或相似的值。

我希望能够将“table”、“pen”等多个选项发送到我的数据库,并获取数据数组中包含这两个选项的所有对象。

为了实现这一目标,我执行了以下操作:

 if (req.body.sol){

    var arr = [];
    arr.push(req.body.sol)
    query.words = {words: {$in: arr}}
}

上述不起作用

但是如果我对此行进行以下更改:

来自

query.words = {words: {$in: arr}} 

query = {words: {$in: arr}}

进行上述更改确实有效,但它不会构建其余的查询。它仅构建“$in”查询。

知道如何解决这个问题吗?

最佳答案

您可以简单地编写如下查询

query.words = {$in: arr}

这样您就可以构建查询的其余部分。


query.words = {words: {$in: arr}} 失败的原因是查询变成了{words:{words: {$in: arr}}} ,这不是您想要的,因为它试图在单词中查找单词。

使用 query.words = {$in: arr} 将使您的查询 {words: {$in: arr}

关于使用 MongoDB "$in"运算符的 Javascript 查询生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34852652/

相关文章:

javascript - 微调哈希以动态创建 ZingCharts 树形图数组

缓存对齐数组元素

ios - 如何快速访问嵌套 JSON 中的数据

javascript - 从递归函数expressjs返回空数组?

javascript - Node js for循环在下一次迭代之前等待异步函数?

javascript - 使用 django-highcharts 包在模板中渲染图表或在 django 中进行常规丑陋渲染的更好选择是什么?

javascript - 更改为服务器端处理后,jQuery 数据表分页损坏

javascript - 在函数内将参数传递给函数 - javascript

regex - 如何使用 mongoose find 获取包含部分字符串的所有值?

MongoDB 查询在引用数据库时显示数组属性中的所有值