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

时间:2020-07-21 07:39:36

标签: mongodb mongodb-.net-driver

在MongoDB中提供了包含以下文档的集合:

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

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

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

感谢您的帮助。 谢谢

1 个答案:

答案 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字段,并用一个新数组映射了旧数组。