如何在没有else表达式的情况下在mongoDB中使用$ cond?

时间:2019-03-15 08:56:20

标签: mongodb

如果site!='undefined',我想将$ site的值添加到变量中,否则我必须跳过该文档并继续进行下一个操作。

我用过

{$addToSet: { $cond: { if: { $ne: [ "$site", 'undefined' ] }, then: "$site"}}}

但是它返回“在$ cond中缺少'else'参数”

,如果我添加else语句

1){$addToSet: { $cond: { if: { $ne: [ "$site", 'undefined' ] }, then: "$site", else: {} }}}

它将值返回给addset {Object Object}

2){$addToSet: { $cond: { if: { $ne: [ "$site", 'undefined' ] }, then: "$site", else: null }}}

它返回null到[[sample1],“ sample2”,]之类的集合

3){$addToSet: { $cond: { if: { $ne: [ "$site", 'undefined' ] }, then: "$site", else: "" }}}

它将空值返回给[[sample1],“ sample2”,“”]之类的集合

如果集不满足条件,我不希望添加任何内容。

2 个答案:

答案 0 :(得分:2)

从MongoDB 3.6开始,可以将$$REMOVE变量用作ELSE运算符的$cond参数,以防止条件失败时将任何内容添加到集合中。

See here,以Mongo Docs为例。

对于您来说,我们可以解决它,

{
    $group: {
            //_id: <group-by-expression>
            // other fields (if any)..
            sites: {
                $addToSet: { 
                    $cond: {
                        if: { $ne: ["$site", 'undefined'] },
                        then: "$site",
                        else: "$$REMOVE"
                    }
                }
            }
    }
}

OR

{
    $group: {
            //_id: <group-by-expression>
            // other fields (if any)..
            sites: {
                $addToSet: { 
                    $cond: [
                        { $ne: ["$site", 'undefined'] },
                        "$site",
                        "$$REMOVE"
                    ]
                }
            }
    }
}

答案 1 :(得分:1)

您可以在else brach上添加null(我使用简化的cond see here):

{
    $group: {
        _id: null,
            A: {
            $addToSet: {
                $cond: [{ $ne: ["$site", 'undefined'] }, "$site", null]
            }
        }
    }
}

然后:

{
    "$project": {
        "A": {
            "$setDifferrence": ["$A", [null]]
        },
    }
}