检查RavenDB中是否存在属性

时间:2012-06-25 07:03:25

标签: ravendb

我想在现有文档中添加属性(使用http://ravendb.net/docs/client-api/partial-document-updates的线索)。但在添加之前想要检查我的数据库中是否已存在该属性。

是否有任何“特殊,适当的ravendB方式”来实现这一目标? 或者只是加载文档并检查此属性是否为null?

1 个答案:

答案 0 :(得分:0)

您可以使用基于集的数据库更新来执行此操作。你使用JavaScript来实现它,幸运的是它与C#相似,对任何人来说都是一个非常轻松的过程。这是我刚刚运行的更新示例。

注意:您必须非常小心这样做,因为脚本中的错误可能会产生不良后果。例如,在我的代码中CustomId包含类似'1234-1'的内容。在我编写脚本的第一次迭代中,我得到了:

product.Order = parseInt(product.CustomId.split('-'));

注意我在拆分后忘记了索引器。结果?一个错误,对吗?不。订单的价值为12341!它应该是1.所以要小心,并确保彻底测试。

示例:

Job有一个Products属性(一个集合),我将新的Order属性添加到现有产品中。

ravenSession.Advanced.DocumentStore.DatabaseCommands.UpdateByIndex(
    "Raven/DocumentsByEntityName",
    new IndexQuery { Query = "Tag:Jobs" },
    new ScriptedPatchRequest { Script =
        @"
        this.Products.Map(function(product) {   
            if(product.Order == undefined)
            {
                product.Order = parseInt(product.CustomId.split('-')[1]);
            }
            return product;
        });"
    }
);

我引用了这些页面来构建它:

set based ops

partial document updates(特别是Map部分)