一个字段的MongoDb聚合框架值,其中最大值为另一个字段

一个字段的MongoDb聚合框架值,其中最大值为另一个字段,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个收藏,里面有这样的记录: "_id" : ObjectId("550424ef2f44472856286d56"), "accountId" : "123", "contactOperations" : [ { "contactId" : "1", "operation" : 1, "date" : 500 }, { "contactId" : "1", "operation" : 2, "date" : 501 }, { "co

我有一个收藏,里面有这样的记录:

"_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和max 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 date记录的contactOperations.operation字段。如何选择该选项?

您必须对展开值进行排序,然后应用$last运算符以获取最大日期的操作。希望此查询能解决您的问题

aggregate([
  {
    $unwind: "$contactOperations"
  },
  {
    $sort: {
      "date": 1
    }
  },
  {
    $group: {
      "_id": {
        "accountId": "$accountId",
        "contactId": "$contactOperations.contactId"
      },
      "date": {
        $max: "$contactOperations.date"
      },
      "operationId": {
        $last: "$contactOperations.operation"
      }
    }
  }
])

您必须对展开值进行排序,然后应用$last运算符以获取最大日期的操作。希望此查询能解决您的问题

aggregate([
  {
    $unwind: "$contactOperations"
  },
  {
    $sort: {
      "date": 1
    }
  },
  {
    $group: {
      "_id": {
        "accountId": "$accountId",
        "contactId": "$contactOperations.contactId"
      },
      "date": {
        $max: "$contactOperations.date"
      },
      "operationId": {
        $last: "$contactOperations.operation"
      }
    }
  }
])

您必须对展开值进行排序,然后应用$last运算符以获取最大日期的操作。希望此查询能解决您的问题

aggregate([
  {
    $unwind: "$contactOperations"
  },
  {
    $sort: {
      "date": 1
    }
  },
  {
    $group: {
      "_id": {
        "accountId": "$accountId",
        "contactId": "$contactOperations.contactId"
      },
      "date": {
        $max: "$contactOperations.date"
      },
      "operationId": {
        $last: "$contactOperations.operation"
      }
    }
  }
])

您必须对展开值进行排序,然后应用$last运算符以获取最大日期的操作。希望此查询能解决您的问题

aggregate([
  {
    $unwind: "$contactOperations"
  },
  {
    $sort: {
      "date": 1
    }
  },
  {
    $group: {
      "_id": {
        "accountId": "$accountId",
        "contactId": "$contactOperations.contactId"
      },
      "date": {
        $max: "$contactOperations.date"
      },
      "operationId": {
        $last: "$contactOperations.operation"
      }
    }
  }
])