Mongoose聚合$ match基于另一个字段而不同?

时间:2015-01-11 05:21:09

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我有一个这样的集合:

[
  {
    "ticketNumber" : "00001",
    "version" : "0"
  },
  {
    "ticketNumber" : "00001",
    "version" : "1"
  },
  {
    "ticketNumber" : "00001",
    "version" : "2"
  },
  {
    "ticketNumber" : "00002",
    "version" : "0"
  },
  {
    "ticketNumber" : "00003",
    "version" : "0"
  },
  {
    "ticketNumber" : "00003",
    "version" : "1"
  }
]

该模型具有我将在稍后的聚合管道中使用的其他属性。我首先需要以某种方式进行过滤,以便根据不同的ticketNumber和最新版本返回票证:

[
  {
    "ticketNumber" : "00001",
    "version" : "2"
  },
  {
    "ticketNumber" : "00002",
    "version" : "0"
  },
  {
    "ticketNumber" : "00003",
    "version" : "1"
  }
]

不确定这是否可行?

1 个答案:

答案 0 :(得分:1)

您使用aggregation framework执行此操作。这是一个简单的$group操作,使用“版本”上的$max运算符:

db.collection.aggregate([
    { "$group": {
        "_id": "$ticketNumber",
        "version":  { "$max": "$version" }
])

如果“version”不是字符串会更好,但它仍然有效,因为即使作为数字字符串它仍然是词法。但“10”在词法上并不大于“2”。所以要小心。