2012-01-22 55 views
1

我有以下文檔。C#mongodb字段名稱重複解決方法

{ 
    name: 'XYZ', 
    SubscriptionPeriods" : [{ 
     "_id" : null, 
     "PeriodCode" : "1M", 
     "Fee" : "100" 
    }, { 
     "_id" : null, 
     "PeriodCode" : "3M", 
     "Fee" : "300" 
    }] 
} 

管理員可以更新訂閱期限;他可以刪除現有時間段和/或在同一更新中添加新時間段。最初我以爲我可以通過在一個Update(...)中的SubscriptionPeriods元素上執行PullAll(...)和PushAll(...)來實現此目的。但事實證明,mongodb在Update(...)中不接受兩次字段。我可以在兩個不同的Update(...)中完成PullAll(...)和PushAll(...)。但是我沒有采取這種方法,因爲如果有人試圖在PullAll()和PushAll()之間讀取SubscriptionPeriods,他將得到一個空的SubscriptionPeriods,這是不可接受的。 所以我想出了這個;我在一次更新中創建了另一個名爲SubscriptionPeriods1的元素,並在另一次更新中將其重命名爲SubscriptionPeriod。這看起來正在工作。但我在想,如果我在這裏忽略任何東西!我感謝MongoDB專家對我的任何評論!

回答

0

是的,這是真的,司機不接受同一領域的兩個操作。但是,對於您的情況,有更簡單的解決方案。

Update.PullAll("name", ..).PushAll("name", ..)等於Set("name", bsonArray)

所以你需要簡單的設置新的陣列,而不是舊的。

+0

謝謝。有效。實際上,我確實嘗試了Set(...),但失敗時出現錯誤,提示'Array不能位於bson文檔的根目錄'。我使用了Set(「ArrayElementName」,列表 .ToBsonDocument())。我認爲這是ToBsonDocument(),抱怨說'數組不能在根。我沒有意識到這一點,並在解決重命名(...)之前繼續嘗試其他各種選擇。儘管如此,BsonArray作爲Set的第二個參數可行! – user1163459

+0

@ user1163459:不客氣。 –