我在MongoDB集合中有以下数据
[
{name: "weight", value: 95, date: "2014-11-07"},
{name: "hips", value: 105, date: "2014-02-06"},
{name: "weight", value: 89, date: "2014-05-12"}
]
我正在尝试获取以下数据:
每个名称的值,其中包含最近的日期:
[
{_id: "weight", value: 95, date: "2014-11-07"},
{_id: "hips", value: 105, date: "2014-02-06"}
]
我已经研究了聚合:
group: {
_id: "$name",
date: { $max: "$date" }
}
但我没有得到我想要的结果。我需要找到的值
[
{_id: "weight", date: "2014-11-07"},
{_id: "hips", date: "2014-02-06"}
]
如何让mongo返回此聚合中的值?或聚合错误的方法?
答案 0 :(得分:2)
您的“约会”值并不能真正帮助您。你应该使用BSON date而不是你现在拥有的“字符串”。至少你串起一个“词汇”,所以他们会正确排序。
但原则基本相同。您需要aggregation framework才能获得结果。此处的主要操作是$sort
到日期,并使用$first
grouping operator和$group
管道阶段:
Model.aggregate(
[
// Sort on the date per grouping key
{ "$sort": { "name": 1, "date": 1 } },
// Then group
{ "$group": {
"_id": "$name",
"value": { "$first": "$value" },
"date": { "$first": "$date" }
}}
],
function(err,results) {
// do something with results
}
)