2016-03-02 77 views
0

我试图更新文档中数组中特定对象的属性。MongoDB C# - 更新数组中特定对象的属性

例如:

{ 
    _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); 

实际上,我想要实现的,是要凭身份证匹配文档,然后找到项目组,其中的“关键”比赛中的对象,然后更新“值”为特定属性只有数组对象。所以我匹配Key:2,我可以更新Key:2的'Value'字段,而Key:1和Key:3保持不变。

这甚至可能吗?

干杯, 贾斯汀

+1

的可能的复制[如何使用MongoDB的Postional运营商在C#代码?](http://stackoverflow.com/questions/9382685/how-to-使用-mongodbs-postional-operator-in -c-sharp-code) –

+0

是的,那个问题是我一直在寻找的......我不知道这个术语是位置运算符。所以我不能使用Linq作为$位置值。干杯。 – Juzzbott

回答

0

其实,阅读张贴的问题后,它并不完全是重复的。在另一个问题的例子中,整个子文档被替换,因为我只是想更新一个字段。

所以我发现在吉拉票,这里的MongoDB的CSHARP司机回答: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 } } 

干杯, 贾斯汀

相关问题