在数据库中,我有类似以下的文档
Ticket {
"eventHistory": [
{
"event": "CREATED",
"timestamp": "aa-bb-cccc"
},
{
"event": "ASSIGNED",
"timestamp": "ii-jj-kkkk"
},
...
{
"event": "CLOSED",
"timestamp": "xx-yy-zzzz"
}
]
}
我想向相关的Ticket
s添加一个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"
}
}
}
])
看看它是如何在操场上工作的例子
但请注意,您假设最后一项是结束项。情况必然如此吗?否则你可以验证它。