Mongodb 聚合和分组以从Mongo db中的集合中获取最后一行
从下面的mongo文档中,我想获得versions.errors中的最后一条记录。 从下面的文档中,我只需要最后一级、消息和时间戳,其中消息显示“与priceZone=AMMO关联的具有FERC信用标志的NITS预订数量为0,此值应等于1” 我尝试使用聚合查询,例如:Mongodb 聚合和分组以从Mongo db中的集合中获取最后一行,mongodb,aggregation-framework,Mongodb,Aggregation Framework,从下面的mongo文档中,我想获得versions.errors中的最后一条记录。 从下面的文档中,我只需要最后一级、消息和时间戳,其中消息显示“与priceZone=AMMO关联的具有FERC信用标志的NITS预订数量为0,此值应等于1” 我尝试使用聚合查询,例如: db.getCollection('ValidationResults').aggregate( {"$match": { "_id.objectIdentifier.objectName" : "SinkPriceZonesWi
db.getCollection('ValidationResults').aggregate(
{"$match": { "_id.objectIdentifier.objectName" : "SinkPriceZonesWithFercCreditFlag", "_id.settlementInstanceId": "3b37de20-e47e-435c-896e-8d9dea0eb63a"}},
{ "$unwind": "$Versions" })
不确定如何在时间戳字段上使用$group从数组中获取最后一个元素,您可以使用运算符并将
-1
作为索引传递。从文档中:
如果为负,$arrayElemAt返回idx位置的元素,从数组末尾开始计数
我只是问,有没有办法只显示这一行而不显示$addFields。我正试图用Java编写这个聚合函数,只是想检查一下。@janopantry project而不是
addFields
。因此,您只能得到最后一行
db.getCollection('ValidationResults').aggregate(
{"$match": { "_id.objectIdentifier.objectName" : "SinkPriceZonesWithFercCreditFlag", "_id.settlementInstanceId": "3b37de20-e47e-435c-896e-8d9dea0eb63a"}},
{ "$unwind": "$Versions" })
db.ValidationResults.aggregate(
[
{
$match: {
"_id.objectIdentifier.objectName" : "SinkPriceZonesWithFercCreditFlag",
"_id.settlementInstanceId": "3b37de20-e47e-435c-896e-8d9dea0eb63a"
}
},
{ $unwind: "$Versions" },
{
$addFields: {
lastError: { $arrayElemAt: [ "$Versions.errors", -1 ] }
}
}
])