在MongoDB中提供了包含以下文档的集合:
{
id: guid,
items: [
{
fieldA : "value"
...
},
{
fieldA : "value"
...
},
]
},
{ ...
}
我必须找到一种使用C#将 fieldA 重命名为 fieldB 的有效方法。 在我看来,MongoDB没有提供可用于数组的重命名运算符。
我尝试了将新字段添加到数组的路径,但是我不知道如何将该字段设置为旧字段的值。
感谢您的帮助。 谢谢
答案 0 :(得分:1)
在MongoDB驱动程序2.10.4中,目前没有类型安全的方法可以实现这一目标。但是,您可以使用$map
建立聚合管道,并将其作为更新管道执行。
var db = client.GetDatabase("test");
var collection = db.GetCollection<MyClass>("data");
var filter = Builders<MyClass>.Filter
.Empty;
var update = Builders<MyClass>.Update.Pipeline(
new PipelineStagePipelineDefinition<MyClass, MyClass>(
new PipelineStageDefinition<MyClass, MyClass>[]
{
@"{ ""$addFields"": {
items: {
$map: {
input: ""$items"",
as: ""item"",
in: {
fieldB: ""$$item.fieldA""
}
}
}
}
}"}));
await collection.UpdateManyAsync(filter, update)
.ConfigureAwait(false);
这是通过运行管道并用管道的输出更新每个文档来完成的,上面是一个简单的管道,它用新的items
字段替换了items
字段,并用一个新数组映射了旧数组。