奇怪的行为mongo聚合框架

时间:2018-03-08 06:30:58

标签: mongodb spring-data-jpa aggregation-framework

我有一个名为账户持有的文件,它有以下记录,

{ "_id" : ObjectId("57cfbb09e4b024be2f1bce57"), 
 "_class" : "com.commercestudio.domain.AccountHolding", 
 "accountId" : "5732933ae4b0b709443b0d1e", 
 "companyId" : "57223d6de4b06c4ef00415b5",
 "brokerageAccountId" : "5KC05007", 
 "symbol" : "AGG", 
 "quantity" : 1.0, 
 "pricePaid" : 112.55, 
 "processDate" : ISODate("2016-09-06T00:00:00.000Z"), 
 "recordDate" : ISODate("2016-09-06T00:00:00.000Z"),
 "createdOn" : ISODate("2016-09-07T07:00:25.479Z") 
} 
{ "_id" : ObjectId("57cfbb09e4b024be2f1bce5b"), 
  "_class" : "com.commercestudio.domain.AccountHolding", 
  "accountId" : "5732933ae4b0b709443b0d1e",
  "companyId" : "57223d6de4b06c4ef00415b5",
  "brokerageAccountId" : "5KC05007",
  "symbol" : "LQD", 
  "quantity" : 4.0, 
  "pricePaid" : 123.78, 
  "processDate" : ISODate("2016-09-06T00:00:00.000Z"), 
  "recordDate" : ISODate("2016-09-06T00:00:00.000Z"), 
  "createdOn" : ISODate("2016-09-07T07:00:25.498Z") 
}

..... 现在我应用aggrigration框架来查找perticulat accountId的最新记录日期数据,

db.accountHolding.aggregate( 
  [
  {
    "$match": {
      "accountId": "5834caf32ae7bacc527ef2f3",
      "symbol": {
        "$in": [
          "IUSG",
          "VEA",
          "IEMG",
          "SCHX",
          "VBR",
          "IUSV",
          "VOE"
        ]
      }
    }
  },
  {
    "$group": {
      "_id": "$symbol",
      "recordDate": {
        "$last": "$recordDate"
      },
      "quantity": {
        "$last": "$quantity"
      },
      "pricePaid": {
        "$last": "$pricePaid"
      }
    }
  }
])

它在两个不同的环境中返回两个不同的结果, 关于我的发展环境它显示,

{ 
    "_id" : "VEA", 
    "recordDate" : ISODate("2018-03-02T00:00:00.000Z"),
    "quantity" : 22.79609, "pricePaid" : 44.14 
}  
{  "_id" : "IUSG", 
   "recordDate" : ISODate("2018-03-02T00:00:00.000Z"),
   "quantity" : 8.87831, 
   "pricePaid" : 55.79 
}

这样的东西和生产环境。它显示,

{
    "_id" : "VEA",
    "recordDate" : ISODate("2018-02-26T00:00:00Z"),
    "quantity" : 22.79609,
    "pricePaid" : 45.76
}
{
    "_id" : "IUSG",
    "recordDate" : ISODate("2018-02-26T00:00:00Z"),
    "quantity" : 8.87831,
    "pricePaid" : 57.47
}

实际上,我无法找到解决方案为什么会发生这种奇怪的行为,因为两个env都有相同的数据。 我的数据库服务器部署在AWS实例上。

有人可以帮助我找出相同的根本原因和解决方案吗?

1 个答案:

答案 0 :(得分:0)

这是预期的行为。

来自docs

  

返回将表达式应用于最后一个值所产生的值   文档在一组字段中共享同一组的文档中。   仅在文档按照定义的顺序时才有意义。

$sort阶段之前添加$group

{$sort:{recordDate:1}}