Mongodb 嵌入文档数组中的最大和比较条件
我有一个这样的集合模式,日期以人类可读的格式发布,但它们存储为ISO日期: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
{
_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()
过程。