我有一个这样的集合:
[
{
"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"
}
]
不确定这是否可行?
答案 0 :(得分:1)
您使用aggregation framework执行此操作。这是一个简单的$group
操作,使用“版本”上的$max
运算符:
db.collection.aggregate([
{ "$group": {
"_id": "$ticketNumber",
"version": { "$max": "$version" }
])
如果“version”不是字符串会更好,但它仍然有效,因为即使作为数字字符串它仍然是词法。但“10”在词法上并不大于“2”。所以要小心。