如何在mongodb中传递动态/可选过滤器?

时间:2017-11-13 10:40:37

标签: node.js mongodb express mongoose

我想根据给定的过滤器从mongodb中选择数据。如果我通过静态过滤器,我会得到正确的结果。

var filter = {'categories ':'business'};

如果我输入动态值,它就不会显示出来。我能够将变量类型视为对象,并且值也是正确的。

static async getArticle(req, res, next) {
   try {

      var filter = {};
   if(req.body.categories || req.body.categories != "") {
       filter.categories = req.body.categories;
   }
   console.log('val: '+JSON.stringify(filter));
   console.log('org val: '+filter);
   console.log('obj type: '+typeof(filter));
   let totalArticle = await Models.Article.find(filter).count().exec();

  res.send({
       success: true,
       totalArticle: totalArticle
   });
   } catch (error) {
       console.error(error);
       res.send({success: false, error});
   }
}

控制台中的输出是

val: {"categories":"business"}
org val: [object Object]
obj type: object

如果我按上述方式传递静态值,我会得到以下回复。

{
    "success": true,
    "totalArticle": 2
}

并且在控制台中它也是相同的:

val: {"categories":"business"}
org val: [object Object]
obj type: object

有人能说出我做错了吗?

2 个答案:

答案 0 :(得分:0)

也许您有错误,因为您在“

”中设置了“filter1”而不是“filter”
   let totalArticle = await Models.Article.find(filter1).count().exec();

希望它有所帮助。

答案 1 :(得分:0)

我在过滤器对象中使用$and。所以,我的查询在数据库select * from collection_name where categorie like "%business"

中触发
 var filter1 = {$and: []};
    if(req.body.categories) {
          var cat = new RegExp(req.body.categories);
          filter1.$and.push({categorie: cat});
    }
    let totalArticle = await Models.Article.find(filter1).count().exec();
    res.send({
          success: true,
          totalArticle: totalArticle
    });