MongoDb 一个字段的聚合框架值 where max 另一个字段
MongoDb aggregation framework value of a field where max another field
我有一个集合,其中的记录如下所示:
"_id" : ObjectId("550424ef2f44472856286d56"), "accountId" : "123",
"contactOperations" :
[
{ "contactId" : "1", "operation" : 1, "date" : 500 },
{ "contactId" : "1", "operation" : 2, "date" : 501 },
{ "contactId" : "2", "operation" : 1, "date" : 502 }
]
}
我想知道某个联系人最近申请的操作编号。
我正在使用聚合框架首先展开 contactOperations,然后按 accountId 和 contactOperations.contactId 以及最大值 contactOperations.date 进行分组。
aggregate([{$unwind : "$contactOperations"}, {$group : {"_id":{"accountId":"$accountId", "contactId":"$contactOperations.contactId"}, "date":{$max:"$contactOperations.date"} }}])
我得到的结果是:
"_id" : { "accountId" : "123", "contactId" : "2" }, "time" : 502 }
"_id" : { "accountId" : "123", "contactId" : "1" }, "time" : 501 }
到目前为止这似乎是正确的,但我还需要用 $max 日期记录的 contactOperations.operation 字段。我怎样才能 select 那?
您必须对展开值进行排序,然后应用 $last 运算符来获取最大日期的操作。希望这个查询能解决您的问题。
aggregate([
{
$unwind: "$contactOperations"
},
{
$sort: {
"date": 1
}
},
{
$group: {
"_id": {
"accountId": "$accountId",
"contactId": "$contactOperations.contactId"
},
"date": {
$max: "$contactOperations.date"
},
"operationId": {
$last: "$contactOperations.operation"
}
}
}
])
我有一个集合,其中的记录如下所示:
"_id" : ObjectId("550424ef2f44472856286d56"), "accountId" : "123",
"contactOperations" :
[
{ "contactId" : "1", "operation" : 1, "date" : 500 },
{ "contactId" : "1", "operation" : 2, "date" : 501 },
{ "contactId" : "2", "operation" : 1, "date" : 502 }
]
}
我想知道某个联系人最近申请的操作编号。
我正在使用聚合框架首先展开 contactOperations,然后按 accountId 和 contactOperations.contactId 以及最大值 contactOperations.date 进行分组。
aggregate([{$unwind : "$contactOperations"}, {$group : {"_id":{"accountId":"$accountId", "contactId":"$contactOperations.contactId"}, "date":{$max:"$contactOperations.date"} }}])
我得到的结果是:
"_id" : { "accountId" : "123", "contactId" : "2" }, "time" : 502 }
"_id" : { "accountId" : "123", "contactId" : "1" }, "time" : 501 }
到目前为止这似乎是正确的,但我还需要用 $max 日期记录的 contactOperations.operation 字段。我怎样才能 select 那?
您必须对展开值进行排序,然后应用 $last 运算符来获取最大日期的操作。希望这个查询能解决您的问题。
aggregate([
{
$unwind: "$contactOperations"
},
{
$sort: {
"date": 1
}
},
{
$group: {
"_id": {
"accountId": "$accountId",
"contactId": "$contactOperations.contactId"
},
"date": {
$max: "$contactOperations.date"
},
"operationId": {
$last: "$contactOperations.operation"
}
}
}
])