MOngoDB根据条件使用不同字段查询groupby以返回最新记录
我想根据条件分组,其中我的目标字段可以是sender.category或receiver.category基于这些字段中的任何一个属于“cat1”的条件,并根据createdAt获取sender.id或receiver.id上每个字段的最后记录 示例Json1:MOngoDB根据条件使用不同字段查询groupby以返回最新记录,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我想根据条件分组,其中我的目标字段可以是sender.category或receiver.category基于这些字段中的任何一个属于“cat1”的条件,并根据createdAt获取sender.id或receiver.id上每个字段的最后记录 示例Json1: { "code" : "34242342", "name" : "name1", "amount" : 200, "sender" : { "id" : "fsrfsr3242",
{
"code" : "34242342",
"name" : "name1",
"amount" : 200,
"sender" : {
"id" : "fsrfsr3242",
"name" : "name2",
"phone" : "12345678",
"category": "cat1"
},
"receiver" : {
"id" : "42342rewr",
"name" : "naem3",
"phone" : "5653679755",
"category": "cat2"
},
"message" : "",
"status" : "done",
"createdAt" : "2019-09-27T09:17:32.597Z"
}
示例Json2:
{
"code" : "34242342",
"name" : "name1",
"amount" : 200,
"sender" : {
"id" : "fsrfsr3242",
"name" : "name2",
"phone" : "12345678",
"category": "cat3"
},
"receiver" : {
"id" : "42342rewr",
"name" : "naem3",
"phone" : "5653679755",
"category": "cat1"
},
"message" : "",
"status" : "done",
"createdAt" : "2019-09-27T09:17:32.597Z"
}
查询:
[{$match: {
$or: [{ "sender.category": 'cat1' }, {"receiver.category" : 'cat1'}]
}}, {$sort: {
"createdAt": 1
}}, {$group: {
_id: {sender :"$sender.id", reciever : "$receiver.id"},
lastrecord: {
$last: "$$ROOT"
}
}}]
我只想返回最后一条记录,sender.id或receiver.id可以有多条记录,我只想检索最后一条记录。但是我的查询返回了多条记录。
如何根据上述条件仅获取最后一个,即最新的,并创建数据
样本输出:
{
"lastrecord" : {
"name" : "name1",
"amount" : 1000,
"sender" : {
"name" : "name2",
"phone" : "213232141",
"category" : "cat1"
},
"receiver" : {
"name" : "name",
"phone" : "321312412",
"category" : "cat2"
},
"status" : "done",
"createdAt" : "2019-11-25T17:00:17.226+06:30"
}
}
我希望每个sender.id或receiver.id都有这个。请发布一个示例输出文档(以及相应的输入文档)。@prasad_uu我已经发布了一个示例输出文档“…但我的查询返回了多个记录”(针对每个组(发送者和接收者)?是,当
$last
为每组(发送方和接收方)选择最后一个时,它将返回两个的倍数。请参见上的示例。