【问题标题】:Javascript Query Builder with MongoDB "$in" operator带有 MongoDB "$in" 运算符的 Javascript 查询生成器
【发布时间】:2016-04-23 12:02:13
【问题描述】:

所以我设置了一个查询构建器,它基于用户与前端数据过滤区域的交互构建查询,该区域包含许多单选按钮和下拉框等。类似于 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 个对象,每个对象中的一个对象都将具有具有不同或相似值的“单词”数组。

我希望能够将多个选项(例如“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”查询。

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

【问题讨论】:

    标签: javascript arrays mongodb mlab


    【解决方案1】:

    您可以使用 bracket notation 在查询属性中添加 $in 运算符:

    if (req.body.sol){
        var arr = [],
            obj = {};    
    
        arr.push(req.body.sol);
        obj["$in"] = arr;
        query.words = obj;
    }
    

    【讨论】:

      【解决方案2】:

      您可以简单地编写查询

      query.words = {$in: arr}
      

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


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

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

      【讨论】:

      • 啊。这清除了如此愚蠢的错误。谢谢你的帮助。
      猜你喜欢
      • 2021-09-17
      • 2017-08-21
      • 2012-05-21
      • 1970-01-01
      • 2012-01-03
      • 2020-11-05
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      相关资源
      最近更新 更多