mongodb聚合管道if else执行其中一个查询

时间:2017-02-01 07:17:33

标签: mongodb if-statement mongodb-query conditional aggregation-framework

我的对象如下所示

{
    id: 1,
    a: "val7f",
    b: "online",
    c: "reg",
    d: "retd"
},
{
    id: 2,
    a: "val6f",
    b: "online",
    c: "reg",
    d: "new"
},
{
    id: 3,
    a: "val6f",
    b: "offline",
    c: "non-reg",
    d: "new"
}

我想以下列方式构建查询。

if (a=="val7f" && b=="offline" && c="reg") has objs > 1 return result Objs
else if(a=="val7f" && b=="offline" && c="reg") has objs > 1 return result objs
etc.

我构建了以下查询,但显示的值来自else查询,即使if结果有结果:

db.Collection.aggregate([
    { $redact: {
        $cond: {
            if: { 
                $and: [ 
                    { $eq: [ "a", "val7f" ] }, 
                    { $eq: [ "b", "offline" ] }, 
                    { $eq: [ "c", "reg" ] } 
                ] 
            },
            then: "$$DESCEND",
            else: {
                $cond: {
                    if: { 
                        $and: [ 
                            { $eq: [ "$a", "val6f"] }, 
                            { $eq: [ "b", "offline"] }, 
                            { $eq: [ "c", "reg"] } 
                        ] 
                    },
                    else: "$$PRUNE"
                }
            }
        }
    } }
]);

总结如下

我已将条件设置如下

if: { 
    $and: [ 
            { $eq: [ "a", "val7f" ] }, 
            { $eq: [ "b", "offline" ] }, 
            { $eq: [ "c", "reg" ] } 
        ] 
    }  

如果有结果说

{
    id: 6,
    a: "val7f",
    b: "online",
    c: "reg",
    d: "retd"
} 

它应该返回上面的文件。 如果没有文件匹配标准

其他情况应该执行

if: {
    $and: [ 
      { $eq: [ "$a", "val6f"] }, 
      { $eq: [ "b", "offline"] }, 
      { $eq: [ "c", "reg"] }
     ] 
    }  

如果有匹配的说法

{
    id: 11,
    a: "val6f",
    b: "offline",
    c: "reg",
    d: "new"
} 

就我而言,对于上面构建的查询,我将两个文档都放在输出shell中。

0 个答案:

没有答案