我有以下数据结构:
{
"_superBill": {
"$oid": "568b250ba082dfc752b20021"
},
"visits": 1,
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-26T13:04:05.544Z"
}
},
{
"_superBill": null,
"visits": 1,
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-27T13:04:05.544Z"
}
},
{
"_superBill": null,
"visits": 1,
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-28T13:04:05.544Z"
}
}
我有一个聚合函数,按引用的 _superBill 字段进行分组。它运行良好,直到我遇到 _superBill 的 null 值并将它们全部分组为一个。
是否有一种方法可以只对具有有效_superBill的条目进行分组,同时仍然包含具有“null”的值,以便我可以在一个查询中执行此操作并按visitDate对它们进行排序?
聚合功能:
{{1}}
结果集看起来像这样。请注意,前两个是分组的,因为它们具有相同的_superBill _id,而另外两个是未分组的。
{{1}}
感谢您寻求并感谢任何帮助。
答案 0 :(得分:3)
如果_id
等于_superBill
,您可以使用null
至$group
您的文档。为此,您可以使用$ifNull
运算符。
Transaction.aggregate(
[
{ "$group": {
"_id": { "$ifNull": [ "$_superBill", "$_id" ] },
"visits": { "$sum": 1 },
"visitDate": { "$first": "$visitDate" },
"commissionRate": { "$first": "$commissionRate" },
"_superBill": { "$first": "$_superBill" }
}}
], function(err,results) {
// Process results
}
)
当然,您也可以使用$cond
运算符。
"_id": {
"$cond": [
{ "$eq": [ "$_superBill", null ] },
"$_id",
"$_superBill"
]
}