C#MongoDB将新密钥插入子文档数组中

时间:2014-06-11 09:00:18

标签: c# .net mongodb mongodb-.net-driver

我正在尝试在旧版本和较新版本的模型之间编写迁移脚本,我们有一个反应式迁移系统,它检查加载的模型版本以查看它是否是最新版本。如果不是,它将向模型应用迁移增量并将其保留为新形式。在这个新版本中,所有改变的是现在其中一个子对象有一个叫做“SomeNewKey”的密钥。

以下是数据如何查找旧版本的模型:

{
    SomeModel: 
    {
        _id: <some-guid>,
        Version: 1.0.1
        Name: <some-string>,
        SomeArrayData: [
            {
                Name: <some-string>,
                DateCreated: <some-date>
            },
            {
                Name: <some-string>,
                DateCreated: <some-date>
            },
            {
                Name: <some-string>,
                DateCreated: <some-date>
            }
        ]       
    }
}

以下是新版本的应用方式:

{
    SomeModel: 
    {
        _id: <some-guid>,
        Versio: 1.0.2
        Name: <some-string>,
        SomeArrayData: [
            {
                Name: <some-string>,
                DateCreated: <some-date>,
                SomeNewKey: <some-default-guid>
            },
            {
                Name: <some-string>,
                DateCreated: <some-date>,
                SomeNewKey: <some-default-guid>
            },
            {
                Name: <some-string>,
                DateCreated: <some-date>,
                SomeNewKey: <some-default-guid>
            }
        ]       
    }
}

因为你可以看到我基本上需要获取模型,然后浏览SomeArrayData中的每个子文档并插入一个带有默认空guid的新密钥。

我首先尝试过:

var findQuery = Query.EQ("_id", id);
var updateQuery = Update.Set("SomeArrayData.SomeNewKey", Guid.Empty);
var result = collection.Update(findQuery, updateQuery, UpdateFlags.Multi);
if (result.Ok == false) { throw new Exception(result.ErrorMessage); }

然而,这一直引起了人们对写作问题的关注,我无法找到很多相关信息,所以后来我看了一遍,发现了以下文章:

Updating an array of objects with a new key in mongoDB

这似乎意味着我需要进行聚合调用才能完成数组的展开,但我找不到任何关于如何在C#驱动程序中执行此类操作的示例,所以任何人都可以指出我正确的方向?

0 个答案:

没有答案