如何“添加或更新”文档

时间:2019-06-16 18:06:32

标签: ravendb ravendb4

所以我知道我可以打补丁,我知道可以存储,我知道可以放置,但是我清楚的是如何执行“ upsert”类型的操作,如果要在其中添加对象,它不存在,或者如果存在则进行修补。

在RavenDb 4.1+中有可能吗?

现在,我有点在这里,但感觉不对:

foreach (var flag in data)
{
    var exists = await _session.Advanced.ExistsAsync(flag.Id);
    if (!exists)
    {
        await _session.StoreAsync(flag);
    }
    else
    {
        await _store.Operations.ForDatabase("FeatureFlags").SendAsync(
            new PatchOperation(
                id: flag.Id,
                changeVector: null,
                patch: new PatchRequest
                {
                    Script = @"
                        this.Name = args.Name
                        this.Description = args.Description
                        ",
                    Values =
                    {
                        ["Name"] = flag.Name,
                        ["Description"] = flag.Description
                    }
                }));
    }
}

await _session.SaveChangesAsync();

1 个答案:

答案 0 :(得分:2)

uniques(.[] | select(.accountEnabled==true) | select(.assignedPlans[].service=="exchange" and .assignedPlans[].capabilityStatus=="Enabled") | .proxyAddresses[] ) patchIfMissing PatchCommandData

如果文档不存在,这提供了运行脚本的选项。
“修改或创建”操作方式。

  1. 请参见https://ravendb.net/docs/article-page/4.2/Csharp/glossary/patch-command-data
  2. https://ravendb.net/docs/article-page/4.2/Csharp/client-api/operations/patching/single-document#non-typed-session-api
  3. 在以下位置查找更多“补丁”信息:
    https://github.com/ravendb/book/blob/v4.0/Ch04/Ch04.md#patching-documents-and-concurrent-modifications