我有一个像这样的集合架构,日期以人类可读的格式发布,但它们存储为ISO日期:
{
_id : ObjectId(...)
statuses :
[
{
status: "WIP",
date: 9/09/2015 09:31:16.205,
},
{
status: "Finished",
date: 9/09/2015 10:31:16.205,
}
]
}
我想检索其最新状态(date
字段)设置了"Finished"
状态的每个收藏文档。
我在db.records.find({"statuses":{$elemMatch:{$max:date}}})
的问题上一直在努力解决这个问题,但我无法正确完成查询,因为我还没有意识到如何与{{1}进行比较} field。
这可能只适用于聚合框架,但我更加迷失。我希望通过这种查询获得一些指导。
编辑:我的问题必须在状态数组中检索最大日期,然后在同一查询中查看该文档状态。
编辑:经过一番尝试,这是我最接近的答案。
status
答案 0 :(得分:0)
想出来。
db.records.aggregate(
[
{
$match : { "statuses.status" : "Finished" }
},
{
$unwind: "$statuses"
},
{
$sort: { "statuses.date":-1 }
},
{
$group: {
_id: "$_id",
current_status: { $push: "$statuses" }
}
},
{
$match : { "current_status.status" : "Finished" }
},
{
$project : { _id : 1}
}
])