如何传递variables来聚合(匹配)与Mongoose和NodeJS?
我有这样的文件:
{ "_id" : 1, "time": { "start": ISODate("2016-01-18T00:12:41.000Z"), "end": ISODate("2016-01-18T05:12:41.000Z") }, "subject":"javascript", "class": "ABC" } ...
我有客户端/服务器应用程序,客户端将发送请求到服务器有四个variables: timeS
, timeE
, sub
, class
。 他们可能是空的string。
在我的服务器中,如何编写聚合查询来查找匹配过滤条件的logging? 我想忽略空的search项。
var query = db.collection.aggregate([ {"$match": {"$and":[]}} ]);
例:
如果timeS
不是空的,我想$match
$eq
。
如果timeS
和timeE
都不是空的,我想$match
$gte:timeS, $lte:timeE
。
根据inputvariables的存在dynamic地创build匹配标准。
var matchCriteria = {}, pipeline; var timeS, timeE, sub, clazz; //initialize them from your input if (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);
您可能必须进行其他检查,如至less有一个variables存在,以确保匹配critieria不是空的。