嵌入式文档数组中的最大和比较条件

时间:2015-09-09 09:10:51

标签: mongodb

我有一个像这样的集合架构,日期以人类可读的格式发布,但它们存储为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

1 个答案:

答案 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}
        }
    ])