【发布时间】:2019-10-18 11:52:38
【问题描述】:
我有一个这样的收藏:
{
"document_id": "firstDoc",
"date_changed" : ISODate("2017-07-26T17:52:37.061Z"),
"enabled": false
},
{
"document_id": "firstDoc",
"date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
"enabled": true
},
{
"document_id": "secondDoc",
"date_changed" : ISODate("2017-07-26T17:52:37.061Z"),
"enabled": true
},
{
"document_id": "secondDoc",
"date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
"enabled": true
}
我想groupbydocument_id 1st,然后为每个集合获取最大date_changed的文档,然后过滤文档"enabled": true
所以预期的输出是:
{
"document_id": "secondDoc",
"date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
"enabled": true
},
{
"document_id": "firstDoc",
"date_changed" : ISODate("2018-07-26T17:52:37.061Z"),
"enabled": true
}
为什么其他问题的答案不能解决我的问题: 在另一个问题中,只需要一个简单的 groupby 和 count 。
但是在这里我们必须先分组,然后对每个分组的部分应用排序并选择具有最新日期的部分,然后应用过滤器。据我所知,我们不能在组内使用排序。
我试过这个:
var myCursor = db.configurations.aggregate([
{$group: {'_id':'$document_id',
'date':{$max: 'date_changed'}
}
}
]);
while (myCursor.hasNext()) {
var eachDoc = myCursor.next();
printjson(eachDoc.config.booknow.shoppingList.enabled);
printjson(eachDoc.document_id);
}
但它给出了错误:
TypeError: myCursor.hasNext is not a function (shell):1
数据库版本为 2.4.13 有人可以帮忙吗?谢谢。
【问题讨论】:
-
@Ashh 你能解释一下这与你提到的那个重复吗?
标签: mongodb nosql mongodb-query aggregation-framework