【问题标题】:Check if property exists in RavenDB检查 RavenDB 中是否存在属性
【发布时间】:2013-10-17 02:51:50
【问题描述】:

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

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

【问题讨论】:

标签: ravendb


【解决方案1】:

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

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

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

请注意,我在拆分后忘记了索引器。结果?一个错误,对吧?没有。订单的价值为 12341!应该是1。所以要小心,一定要彻底测试。

例子:

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

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 部分)

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2011-02-01
    • 2021-04-22
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多