如何从查询条件中排除特定字段?

时间:2019-01-09 10:27:52

标签: node.js reactjs mongodb

我正在创建一个Web应用程序供用户从mongodb查询数据。我的前端使用react和nodejs连接mongodb的后端。

我已将所有相关的匹配条件包括在汇总函数下。但是,我希望注释掉某些键/值对,这意味着取消查询字段条件的影响。例如,

router.get('/getmongo', function(req, res) {
  MongoClient.connect(process.env.DB_CONN, function(err, db) {
  if (err) throw err;    
    db.aggregate([
      {
        $match:{
          'employmentStatus':/employed|unemployed/i,
          'gender':{$in:["male","female"]},
          'age':{$gte:20, $lte:30}
      }
    },
    { "$group": {
        "_id": "$employmentStatus",
        "count": { "$sum": 1 }
        }}
    ]).limit(4).toArray(function(err, docs) {
    if (err) throw err;
    res.send(JSON.stringify(docs))
    db.close();
  })
})

在前端说,用户没有选择年龄选项,这意味着用户端没有关于年龄标准的说明。通常,在这种情况下,用户会在MongoDB GUI上注释掉或删除整条年龄查询,而仅剩下jobStatus和性别作为查询的两个条件。我一直在寻找mongoAPI,但找不到任何有用的工具来复制这种效果。有什么想法或建议吗? (顺便说一下,我正在使用Mongo v2.3.3)

1 个答案:

答案 0 :(得分:2)

您应该在用户输入的基础上有条件地构建查询,而不是在MongoDB端的查询中添加条件。

每当用户选择列时,都使用这些列和值构建$match子句。这样,它将变得非常动态。

伪代码示例:

var queryObject = {};

if(age.selected)
          queryObject.add(ageCondition)
if(employmentStatus.selected)
          queryObject.add(employmentStatusCondition)
if(gender.selected)
          queryObject.add(genderCondition)

.....
......

您可以在Node.js中构建类似的逻辑。