如何将变量传递给与Mongoose和NodeJS聚合(匹配)?

时间:2016-01-19 03:12:23

标签: node.js mongodb mongoose aggregation-framework

我有这样的文件:

{
    "_id" : 1,
    "time": {
         "start": ISODate("2016-01-18T00:12:41.000Z"),
         "end": ISODate("2016-01-18T05:12:41.000Z")
    },
    "subject":"javascript",
    "class": "ABC"
}
...

我有客户端/服务器应用程序,客户端会向服务器发送包含四个变量的请求:timeStimeEsubclass。它们可能是空字符串。

在我的服务器中,如何编写聚合查询以查找与筛选条件匹配的记录?我想忽略空的搜索词。

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

示例:

如果timeS不为空,我希望$match$eq

如果timeStimeE都不为空,我希望$match$gte:timeS, $lte:timeE

1 个答案:

答案 0 :(得分:1)

根据输入变量的存在动态创建匹配条件。


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);

 

您可能必须执行其他检查,例如至少存在一个变量,以确保匹配标准不为空。