Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 嵌入文档数组中的最大和比较条件_Mongodb - Fatal编程技术网

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

Mongodb 嵌入文档数组中的最大和比较条件,mongodb,Mongodb,我有一个这样的集合模式,日期以人类可读的格式发布,但它们存储为ISO日期: { _id : ObjectId(...) statuses : [ { status: "WIP", date: 9/09/2015 09:31:16.205, }, { status: "Finished", date: 9/09/2015 10:31

我有一个这样的集合模式,日期以人类可读的格式发布,但它们存储为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}}}})的行中挣扎着如何这样做
但是我无法正确地完成查询,因为我不知道如何与
status
字段进行比较

这可能只有在聚合框架下才可能实现,但我更迷茫了。我想要一些关于这类问题的指导

编辑:我的问题需要在statuses数组中检索最长日期,然后在同一查询中查看文档状态

编辑:经过一些尝试,这是我最接近的答案

db.records.aggregate([{$match : {"statuses.status":"Finished"}},{$unwind : "$statuses"},{$sort: { "date": -1}},{$limit: 1}])
我明白了

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

可能的副本。我仍然在浏览器选项卡中打开了最后两个副本中的问题。长格式的
.aggregate()。此外,您的日期似乎是“字符串”,这对您没有帮助。@BlakesSeven这些日期是以ISO格式存储的,正如我在问题中所说,我的主要问题是如何检索最大日期,然后查看同一查询中的状态。答案显示了执行此操作的
.aggregate()
过程。