【发布时间】:2015-12-24 18:47:47
【问题描述】:
尝试“重置”文档中的嵌套对象,但不会将其设置回空。
我有一个 POCO:
public class StreetAddress
{
public int HouseNumber { get; set; }
public string Street { get; set; }
}
public class FullAddress
{
public string City{ get; set; }
public string State { get; set; }
public StreetAddress StreetAddress { get; set; }
public int Zip { get; set; }
public List<string> Codes { get; set; }
}
所以目前,如果我为 FullAddress 创建了这个新文档,并且 StreetAddress 已经设置,则查询时文档看起来像这样:
"_source": {
"city": "Los Angeles",
"state": "California",
"zip": 90019,
"streetAddress": {
"houseNumber": 1,
"street": "Apple Street"
},
"codes" : [
{ "la-601" }
]
}
现在我想调用 NEST 客户端更新来重置 StreetAddress 嵌套对象:
StreetAddress localStreetAddress = new StreetAddress();
var partialAddress = new
{
City = "NewCity",
Zip = 11111,
StreetAddress = localStreetAddress
};
this._client.Update<ElasticsearchProject, object>(update => update
.Id(1)
.Doc(partialAddress)
);
我在查询时希望的最终结果是在上述更新调用之后:
"_source": {
"city": "NewCity",
"state": "California",
"zip": 11111,
"streetAddress": {}
}
但是,部分更新会做两件不希望的事情:
- 它只更新 City 和 Zip 字段并保留 StreetAddress 和以前一样,并没有将其清除为空或空。
- 由于部分更新不包括该列表,因此它会将代码列表清除为空。
我知道我可以将 StreetAddress 设置为 null 并添加 JSON 属性以包含 null,如下所示:
[JsonProperty(NullValueHandling = NullValueHandling.Include)]
public StreetAddress StreetAddress { get; set; }
但结果是文档更新会将其设置为 null 而不是空的,我不确定这是否是文档所需的结果:
"_source": {
"city": "NewCity",
"state": "California",
"zip": 11111,
"streetAddress": null
}
不确定是否有办法在不通过脚本路径将嵌套对象设置回空的情况下进行部分更新。
【问题讨论】:
标签: elasticsearch nest