我在 MongoDB 中有一个文档集合,它们看起来都与此类似:
{
"WorkspacePartTeamsite" : {
"SiteContents" : [
{
"_id" : "00000000-0000-0000-0000-000000000002",
"Name" : "PublicFiles",
},
{
"_id" : "ad57fee3-e478-46a6-a8c1-499dcc98995f",
"Name" : "Private",
},
...
]
}
}
该集合包含数百个这样的文档。
我想更新“SiteContents”数组并将属性“Name”复制到另一个属性“SPOSegment”。
结果可能如下所示:
{
"WorkspacePartTeamsite" : {
"SiteContents" : [
{
"_id" : "00000000-0000-0000-0000-000000000002",
"Name" : "PublicFiles",
"SPOSegment": "PublicFiles"
},
{
"_id" : "ad57fee3-e478-46a6-a8c1-499dcc98995f",
"Name" : "Private",
"SPOSegment": "Private"
},
...
]
}
}
我已经尝试写一些查询,但它们都不起作用。
例如:
db.collection.updateMany(
{
$set: {
"WorkspacePartTeamsite.SiteContents": {
$map: {
input: "$WorkspacePartTeamsite.SiteContents",
as: "item",
in: {
$mergeObjects: [
"$$item",
{ SPOSegment: "$$item.Name" }
]
}
}
}
}
}
)
有什么建议我可以做什么吗?
您缺少用于过滤要更新的文档的第一个参数。
与
$map
聚合运算符一样,您应该使用聚合管道。演示@Mongo Playground