如何在 C# 中重命名 mongodb 中嵌套数组的文档字段

How to rename a document field of a nested array in mongodb in c#

在 MongoDB 中给定一个包含以下文档的集合:

{
  id: guid,
  items: [
    {
      fieldA : "value"
      ...
    },
    {
      fieldA : "value"
      ...
    },
  ]
},
{  ...
}

我必须找到一种使用 C# 将 fieldA 重命名为 fieldB 的有效方法。 在我看来 MongoDB 没有提供可用于数组的重命名运算符。

我尝试了向数组添加新字段的路径,但我不知道如何将该字段设置为旧字段的值。

感谢任何帮助。 谢谢

目前在 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 字段使用从旧数组映射的新数组。