我正在写一个使用聚合管道的Mongo查询。在汇总期间,我需要$unwind
其中的一个字段。但是,我不希望$unwind
排除具有该字段的零长度数组的条目,因为我仍然需要它们进一步向下。
我的字段名为items
,它是一个对象数组,它们各自包含两个值:quantity
和price
。这里是我的蒙戈查询的片段至今:
db.MyCollection.aggregate([
{$match: ... },
{$project: ... },
// put another $project here to retain zero-length values? how to format it?
{$project: {
_id: "$$ROOT",
items: {
$ifNull: [
{
$literal: {
quantity: 0,
price: 0
}
}
]
}
}
},
{$unwind: "$items"},
{$group: ... },
{$project: ... },
...
]);
正如你所看到的,这已经处理的情况下的文件没有出现在items
场可言,在这种情况下,增加了它,并给出这是一个值得放松的空值。
但是没有处理的是文件已经有items
字段存在,但它是空白的。我想我可以使用$cond
和$size
的一些组合来明确检查另一个$project
中的零的大小,然后在这种情况下替换相同的文字,但$if
需要一个布尔值,所以我不太确定如何格式化。
你是什么意思'项目是blank'? '项目:[]'?或项目:“”? – BatScream 2014-11-22 22:37:16
我的意思是'物品:[]' – SoaperGEM 2014-11-22 22:37:40