我有这种文件:

{
    "_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

最佳答案

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

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/

10-15 23:48