gpt4 book ai didi

MongoDb 将 $group '_id' 空值聚合为不同的

转载 作者:可可西里 更新时间:2023-11-01 09:13:02 24 4
gpt4 key购买 nike

我有以下数据结构:

{
"_superBill": {
"$oid": "568b250ba082dfc752b20021"
},
"paymentProviderTxID": "aaaa",
"transactionRaw": "abcdef",
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-26T13:04:05.544Z"
}
},
{
"_superBill": {
"$oid": "568b250ba082dfc752b20021"
},
"paymentProviderTxID": "bbbb",
"transactionRaw": "abcdef",
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-26T13:04:05.544Z"
}
},
{
"_superBill": null,
"paymentProviderTxID": "cccc",
"transactionRaw": "abcdef",
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-27T13:04:05.544Z"
}
},
{
"_superBill": null,
"paymentProviderTxID": "dddd",
"transactionRaw": "abcdef",
"commissionRate": 0.2,
"visitDate": {
"$date": "2016-12-28T13:04:05.544Z"
}
}

我有一个聚合函数,它按引用的 _superBill 字段分组。在我遇到 _superBillnull 值并将它们全部组合为一个条目之前,它一直很好用。

有没有一种方法可以只对具有有效 _superBill 的条目进行分组,同时仍然包括具有“null”的值,以便我可以在一个查询中执行此操作并按 visitDate 对它们进行排序?

聚合函数:

Transaction.aggregate([
{ $match: { paymentDate: { $gte: period.periodStart, $lt: period.periodEnd }} },
{
$group: {
_id: "$_superBill",
visits: { $sum: 1 }
}
},
{
$project: {
_id: '$_id',
superBill: '$_id',
visits: '$visits',
visitDate: '$visitDate',
commissionRate: '$commissionRate'

}
}
], function(err,results) {
// Process results
});

结果集看起来像这样。请注意,前 2 个已分组,因为它们具有相同的 _superBill _id,而其他两个未分组。

{
"_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"
}
}

感谢您的关注并感谢您的帮助。

最佳答案

您可以使用_id$group如果 _superBill 等于 null,您的文档。为此,您可以使用 $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"
]
}

关于MongoDb 将 $group '_id' 空值聚合为不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com