MongoDB聚合管道动态匹配查询

时间:2017-08-22 16:48:54

标签: mongodb aggregation-framework

我想使用匹配管道阶段根据给定的参数进行动态过滤,这些参数在我调用函数时可能会或可能不会被定义。

例如,如果我将JSON对象传递给包含Field1值的函数,我将得到如下匹配管道:

        {
        "$match": {
            "Field1": Field1_value
        }}

但是,如果我将一个JSON对象传递给包含Field1和Field 2值的函数,我希望有一个匹配管道,如下所示:

        {
        "$match": {
            "Field1": Field1_value,
            "Field2": Field2_value
        }}

是否有一种简单的方法可以不必为我传递给此函数的每个字段组合编写静态管道?

1 个答案:

答案 0 :(得分:0)

我假设你不是纯粹的Mongo编程。如果是这样,您可以使用您正在使用的任何其他内容来准备$match对象。

这是一个关于Javascript的例子

var pipeline = function(parameters){
    return [
        {
        $match:parameters,
        }
        // put here other stages
    ]
};

// first call
collection.aggregate(
    pipeline({"Field1": Field1_value}), options, callback
);
// second call
collection.aggregate(
    pipeline({"Field1": Field1_value, "Field2": Field2_value}), options, callback
)

如果$match操作不是您的第一个操作并且取决于之前的操作,我认为不可能这样做。