我正在尝试更新文档中数组中特定对象的属性。
例如:
{
_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数组中找到'Key'匹配的对象,然后仅更新该特定数组对象的'Value'属性。所以我匹配Key:2,我可以更新Key的'Value'字段:2,Key:1和Key:3保持不变。
这甚至可能吗?
干杯, 贾斯汀
答案 0 :(得分:0)
实际上,在阅读发布的问题之后,它并不是一个重复的问题。在另一个问题的示例中,整个子文档被替换,因为我只想更新单个字段。
所以我在这里找到了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 } }
干杯, 贾斯汀