MongoDB C# - 更新数组中特定对象的属性

时间:2016-03-02 02:45:37

标签: c# arrays mongodb

我正在尝试更新文档中数组中特定对象的属性。

例如:

{
    _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保持不变。

这甚至可能吗?

干杯, 贾斯汀

1 个答案:

答案 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 } }

干杯, 贾斯汀