包含删除的NEST更新文档

本文关键字:更新 文档 NEST 删除 包含 | 更新日期: 2023-09-27 18:09:26

我的问题如下我有一个由字典组成的数据类型。

Data d = new Data();
d.Id = "1"
d.Items.Add("item1", "hello");
d.Items.Add("item2", "world");

现在我想删除键为item1的Item。

d.Items.Remove("item1");
Index.Update(d);

我的更新方法是这样的:

client.Update<Data>(u => u
            .Index("defaultindex")
            .Type("data")
            .Document(d)
            .Id(d.Id)
            .RetryOnConflict(5)
            .Refresh()
            );

但是键为item1的Item仍然存在。有人知道,我如何告诉更新方法删除这个条目吗?

包含删除的NEST更新文档

可以通过脚本或通过更新的文档进行更新。在您的情况下,您通过文档选项进行更新,但是您在调用中指定脚本类型,因为您使用的是Update<T>而不是Update<T,K>。你可以在脚本API的更新中看到一个脚本更新的例子。

尝试将您的代码更改为以下内容,您应该会看到您期望的更新。

client.Update<Data, Data>(u => u
            .Index("defaultindex")
            .Type("data")
            .Document(d)
            .Id(d.Id)
            .RetryOnConflict(5)
            .Refresh()
            );

你甚至可以只发送部分更新,只更新Items部分。

var updateDocument = new System.Dynamic.ExpandoObject();
var newItems = new Dictionary<string, string>();
newItems.Add("item2","world");
updateDocument.Items = newItems;
client.Update<Data, object>(u => u
            .Index("defaultindex")
            .Type("data")
            .Document(updateDocument)
            .Id(d.Id)
            .RetryOnConflict(5)
            .Refresh()
            );