【问题标题】:How to exclude specific fields from the query condition?如何从查询条件中排除特定字段?
【发布时间】:2019-01-09 18:45:13
【问题描述】:

我正在创建一个 webapp 供用户从 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 上注释掉或删除整行年龄查询,只留下就业状态和性别作为唯一的两个查询条件。我正在研究 mongoAPI 但找不到任何有用的工具来复制这种效果。有什么想法或建议吗? (顺便说一下我用的是Mongo v2.3.3)

【问题讨论】:

    标签: node.js reactjs mongodb


    【解决方案1】:

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

    每当用户选择列时,使用这些列和值构建$match 子句。这样一来,它就会非常有活力。

    示例伪代码:

    var queryObject = {};
    
    if(age.selected)
              queryObject.add(ageCondition)
    if(employmentStatus.selected)
              queryObject.add(employmentStatusCondition)
    if(gender.selected)
              queryObject.add(genderCondition)
    
    .....
    ......
    

    你可以在 Node.js 中构建一些这样的逻辑。

    【讨论】:

    • 感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 2017-12-23
    • 2014-05-08
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多