我有一个具有以下结构的集合:
{
arrangements: [
{ displayName: "MRT.8" },
{ displayName: "MRT.10" },
{ displayName: "MRT.12" },
(...)
]
}
我希望将子字符串MRT
替换为MOBILE
,因此结果如下:
{
arrangements: [
{ displayName: "MOBILE.8" },
{ displayName: "MOBILE.10" },
{ displayName: "MOBILE.12" },
(...)
]
}
在the solution for a similar problem on SO之后,我执行了以下操作:
db.collection('releaseDocument').updateMany({"arrangements.displayName": {$regex: /MRT\..*/}}, [
{
$set: {
'arrangements.displayName': {
$concat: [
"MOBILE.",
{$arrayElemAt: [{$split: ["$displayName", "MRT."]}, 0]}
]
}
}
}
])
但是这并不起作用,因为$
引用的是当前文档,而不是嵌套的数组元素。
1条答案
按热度按时间xdnvmnnf1#
您似乎正在使用带有聚合管道的更新,需要
$map
运算符。对于
$arrayElementAt
部分,我认为您需要1作为索引来获取第二个元素。假设筛选器返回要更新的文档:
Sample Mongo Playground