我有这种文件:
{
"_id" : 1,
"time": {
"start": ISODate("2016-01-18T00:12:41.000Z"),
"end": ISODate("2016-01-18T05:12:41.000Z")
},
"subject":"javascript",
"class": "ABC"
}
...
我有客户端/服务器应用程序,客户端将使用四个变量将请求发送到服务器:
timeS
,timeE
,sub
,class
。它们可能是空字符串。在服务器中,如何编写聚合查询以查找与过滤条件匹配的记录?我想忽略空的搜索词。
var query = db.collection.aggregate([
{"$match": {"$and":[]}}
]);
例:
如果
timeS
不为空,我想要$match
与$eq
。如果
timeS
和timeE
都不为空,则我要$match
和$gte:timeS, $lte:timeE
。 最佳答案
根据输入变量的存在动态创建匹配条件。var matchCriteria = {}, pipeline;var timeS, timeE, sub, clazz; //initialize them from your inputif (timeS) { matchCriteria['time.start'] = timeS;}if (timeE) { matchCriteria['time.end'] = timeE;}if (sub) { matchCriteria.subject = sub;}if (clazz) { matchCriteria.class = clazz;}pipeline = [ { $match: matchCriteria }];db.collection.aggregate(pipeline);
您可能需要做其他检查,例如至少存在一个变量,以确保匹配标准不为空。
关于node.js - 如何通过Mongoose和NodeJS传递变量以进行聚合(匹配)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34867907/