如何传递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: timeStimeEsubclass 。 他们可能是空的string。

在我的服务器中,如何编写聚合查询来查找匹配过滤条件的logging? 我想忽略空的search项。

 var query = db.collection.aggregate([ {"$match": {"$and":[]}} ]); 

例:

如果timeS不是空的,我想$match $eq

如果timeStimeE都不是空的,我想$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不是空的。