2016-03-02 80 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 } } 

乾杯, 賈斯汀

相關問題