Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MOngoDB根据条件使用不同字段查询groupby以返回最新记录_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

MOngoDB根据条件使用不同字段查询groupby以返回最新记录

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",

我想根据条件分组,其中我的目标字段可以是sender.category或receiver.category基于这些字段中的任何一个属于“cat1”的条件,并根据createdAt获取sender.id或receiver.id上每个字段的最后记录

示例Json1:

{
    "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
为每组(发送方和接收方)选择最后一个时,它将返回两个的倍数。请参见上的示例。