我的数据看起来像这样。
sortfunc
我需要按{
"badgeId" : "ventura",
"date" : ISODate("2016-12-22T21:26:40.382+0000"),
"mistakes" : NumberInt(10)
}
{
"_id" : "a4usNGibIu",
"badgeId" : "dog",
"date" : ISODate("2016-12-21T21:26:40.382+0000"),
"mistakes" : NumberInt(10)
}
{
"_id" : ObjectId("580c77801d7723f3f7fe0e77"),
"badgeId" : "dog",
"date" : ISODate("2016-11-24T21:26:41.382+0000"),
"mistakes" : NumberInt(5)
}
分组的文档,其中badgeId
最小,相应的mistakes
我无法对$ group中的date
使用$ min,$ max,$ first,$ last,因为我需要date
最低的行date
。
我在使用mistakes
时尝试了以下查询,但它不会提供预期的结果,因为它会选择$min
date
答案 0 :(得分:0)
您可以按mistakes
对结果进行排序,然后选择相应的$first
mistakes
和date
[
{$sort: {mistakes: 1}},
{
$group: {
_id: '$badgeId',
date: {
$first: '$date'
},
mistakes: {
$first: '$mistakes'
}
}
}
]
答案 1 :(得分:0)
我认为您的查询是正确的,但正如您在此处看到的日期无效。
ISODate(" 2016-14-22T21:26:41.382 + 0000")和 ISODate(" 2016-13-22T21:26:40.382 + 0000&#34)强>,
在这两个日期中你可以看到月份是13和14,这是无效的月份。以下是放入mongodb后的正确数据。
{
"_id" : ObjectId("580ca86c9a43fad551ba801f"),
"badgeId" : "ventura",
"date" : ISODate("2016-12-22T21:26:40.382Z"),
"mistakes" : 10
}
{
"_id" : "a4usNGibIu",
"badgeId" : "dog",
"date" : ISODate("2016-12-23T21:26:40.382Z"),
"mistakes" : 10
}
{
"_id" : ObjectId("580c77801d7723f3f7fe0e77"),
"badgeId" : "dog",
"date" : ISODate("2016-12-24T21:26:40.382Z"),
"mistakes" : 5
}
应用您的查询时
db.getCollection('COLLECTION_NAME').aggregate([
{
$group: {
_id: '$badgeId',
date: {
$min: '$date'
},
mistakes: {
$min: '$mistakes'
}
}
}
])
我得到了以下结果。
{
"_id" : "dog",
"date" : ISODate("2016-12-23T21:26:40.382Z"),
"mistakes" : 5
}
{
"_id" : "ventura",
"date" : ISODate("2016-12-22T21:26:40.382Z"),
"mistakes" : 10
}