MongoDB使用数组字段的元素来$set文档的新字段



在数据库中,我有类似以下的文档

Ticket {
"eventHistory": [
{
"event": "CREATED",
"timestamp": "aa-bb-cccc"
},
{
"event": "ASSIGNED",
"timestamp": "ii-jj-kkkk"
},
...
{
"event": "CLOSED",
"timestamp": "xx-yy-zzzz"
}
]
}

我想向相关的Tickets添加一个closedAt字段,从eventHistory数组的最后一个元素中获取值。生成的文档看起来像下面的

Ticket {
"eventHistory": [
{
"event": "CREATED",
"timestamp": "aa-bb-cccc"
},
{
"event": "ASSIGNED",
"timestamp": "ii-jj-kkkk"
},
...
{
"event": "CLOSED",
"timestamp": "xx-yy-zzzz"
}
],
"closedAt": "xx-yy-zzzz"
}

下面的管道允许我使用作为eventHistory数组的最后一个元素存在的整个对象。

db.collection.updateMany(
<query>,
[
"$set": {
"closedAt": {
"$arrayElemAt": [
"$eventHistory",
-1
]
}
}
]
...
)

但我只想使用timestamp字段;而不是整个对象。

请帮我调整(和/或改进(管道。

修复查询的一个选项是:

db.collection.updateMany(
<query>,
[
{
$set: {
"Ticket.closedAt": {
$last: "$Ticket.eventHistory.timestamp"
}
}
}
])

看看它是如何在操场上工作的例子

但请注意,您假设最后一项是结束项。情况必然如此吗?否则你可以验证它。

最新更新