Mongodb mongo:查找未被取代的文档
我收集了以下文件:Mongodb mongo:查找未被取代的文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我收集了以下文件: { "_id" : "ThisIsASampleId_rand12345", "timestamp" : ISODate("2019-04-30T10:53:34.515Z"), "mySpecialId" : "specialId_12345", "status" : "error", } 我的目标是找到所有具有{status:'error'}的文档,只要没有具有相同mySpecialId和status'su
{
"_id" : "ThisIsASampleId_rand12345",
"timestamp" : ISODate("2019-04-30T10:53:34.515Z"),
"mySpecialId" : "specialId_12345",
"status" : "error",
}
我的目标是找到所有具有{status:'error'}
的文档,只要没有具有相同mySpecialId
和status
'success'
的后续文档存在
显然我可以做db.jobs.find({status:'error'})
,但在那之后,我就迷路了
我是否需要在聚合管道中对同一个集合执行$lookup
,使用“mySpecialId”
作为本地和外部字段,使用$match
,其中包括类似{$gt:{timestamp:$PREVIOUS_timestamp}
?不知怎么的,这感觉不对
有更简单/更好/更优雅的方法吗?您可以通过时间戳
字段收集,然后与操作员一起运行,以获取每个mySpecialId
的最新文档。然后,您只需检查最后一个文档的状态
是否为错误
。如果没有,则该组中的所有文档都有success
或出现的error
被替换为success
。要恢复文档的原始形状,可以使用
db.col.aggregate([
{
$sort: { timestamp: 1 }
},
{
$group: {
_id: "$mySpecialId",
lastDoc: { $last: "$$ROOT" }
}
},
{
$match: {
"lastDoc.status": "error"
}
},
{
$replaceRoot: {
newRoot: "$lastDoc"
}
}
])