1

所以我知道我可以打补丁,我知道我可以存储,我知道我可以放,但我很清楚如何做一个“upsert”类型的操作,如果没有,我想在其中添加对象' t 存在,或者如果存在则对其进行修补。

这在 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();
4

1 回答 1

3

patchIfMissingPatchCommandData或与一起使用Operations API

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

  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
于 2019-06-17T08:00:45.503 回答