Как я могу «добавить или обновить» документ - PullRequest
1 голос
/ 16 июня 2019

Итак, я знаю, что могу исправлять, я знаю, что могу хранить, и я знаю, что могу поставить, но я ясно понимаю, как я могу выполнить операцию типа «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 Ответ

2 голосов
/ 17 июня 2019

Используйте patchIfMissing с PatchCommandData или с 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
...