如果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”,“”]之类的集合
如果集不满足条件,我不希望添加任何内容。
答案 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]]
},
}
}