【发布时间】:2021-05-29 09:23:36
【问题描述】:
我有一些具有以下结构的文档...
{
user: "Joe",
lists: [
{ listId: "1234", listName: "dogs" },
{ listId: "5678", listName: "cats" }
]
}
我正在尝试为每个 listId 字段添加一个字符串,但我被卡住了。在我尝试过的其他事情中......
db.users.updateMany(
{"lists.listId": /^[0-9a-f]{20,}$/},
[{$set:
{"lists.listId.$[]": {"$concat": ["0000", "$lists.listId"]}}
}]
)
但我收到错误消息:“FieldPath 字段名称可能不以'$'开头”
此写入的变化结果进入适当的字段,但不是我想要的结果。
我已经对文档猛烈抨击了几个小时,但是我能找到的所有使用位置运算符引用正在更新的字段的值的引用都直接使用字段名称,而不是作为像我一样的财产。我之前并没有真正搞乱管道,我发现这有点令人困惑!昨天有人好心地帮助了我closely related problem,使用$map,这对于一个普通的字符串数组非常有效,但我没有任何运气将它适应一个具有字符串属性的对象数组。抱歉,如果这是 Mongo 101,文档很好,但其中有很多,我不确定哪些位与此相关。
【问题讨论】:
-
您是否尝试为集合中的所有文档更新
lists数组中的所有项目? -
是的,就是这样。这是一次性操作/迁移。