我正在尝试更新文档中数组中特定对象的属性。
例如:
{
_id: #####
Items: [
{ Key: 1, Value: "Something" },
{ Key: 2, Value: "Foo" },
{ Key: 1, Value: "Bar" },
]
}
我正在使用MongoDB C#2.0驱动程序,这就是我要使用的过滤器(尽管我很确定这将匹配整个文档,而不是子文档)。
FilterDefinition<GroupDto> filter = Builders<GroupDto>.Filter.Eq(i => i.Id, groupId) &
Builders<GroupDto>.Filter.ElemMatch(i => i.Items, u => u.Key == key);
实际上,我要实现的目标是按ID匹配文档,然后在Items数组中找到“键”匹配的对象,然后仅为该特定数组对象更新“值”属性。因此,我匹配键:2,我可以仅更新键:2的“值”字段,并且键:1和键:3保持不变。
这有可能吗?
干杯,贾斯汀
实际上,在阅读了所发布的问题之后,它并不是一个重复的问题。在另一个问题的示例中,替换了整个子文档,因为我只想更新一个字段。
因此,我在这里的MongoDB CSHARP驱动程序的Jira票证中找到了答案:https : //jira.mongodb.org/browse/CSHARP-531
您可以在索引器中使用-1来指定使用位置运算符。
从票:
这仅适用于2.0.0中的新API。-1可用作索引器或与GetElementAt一起使用,以指示我们使用位置运算符。例如:
Builders<Entity>.Update.Set(x => x.MyArray[-1].Value, 10);
// will yield {$set: { "MyArray.$.Value", 10 } }
干杯,贾斯汀
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句