我正在创建一个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)
答案 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中构建类似的逻辑。