检查RavenDB中是否存在属性

检查RavenDB中是否存在属性,ravendb,Ravendb,我想将属性添加到现有文档中(使用线索表单)。但在添加之前,我想检查数据库中是否已经存在该属性 有什么“特殊的、适当的ravendB方法”可以实现这一点吗? 或者只需加载文档并检查此属性是否为null?您可以使用基于集合的数据库更新来完成此操作。您可以使用JavaScript来实现它,幸运的是,它与C语言非常相似,因此对任何人来说都是一个非常轻松的过程。下面是我刚刚运行的一个更新示例 注意:执行此操作时必须非常小心,因为脚本中的错误可能会产生意外结果。例如,在我的代码中,CustomId包含类似“

我想将属性添加到现有文档中(使用线索表单)。但在添加之前,我想检查数据库中是否已经存在该属性

有什么“特殊的、适当的ravendB方法”可以实现这一点吗?

或者只需加载文档并检查此属性是否为null?

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

注意:执行此操作时必须非常小心,因为脚本中的错误可能会产生意外结果。例如,在我的代码中,CustomId包含类似“1234-1”的内容。在编写脚本的第一次迭代中,我有:

product.Order = parseInt(product.CustomId.split('-'));
注意,拆分后我忘记了索引器。结果如何?一个错误,对吗?不。订单的价值是12341!应该是1。所以要小心,一定要彻底测试

例如:

Job有一个Products属性(集合),我正在将new 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;
        });"
    }
);
我引用了以下页面来构建它:

(特别是本节)

请参见此处的讨论: