2017-07-03 68 views
0

假設這種結構MongoDB的C# - 我如何才能在陣列更新元素

class A 
{ 
    string Id; 
    int value 
    ... 
} 

class B 
{ 
    int sum; 
    List<A> L; 
    some stuff 
} 

我有一個蒙戈表圖標B

我需要做什麼僞代碼如下:

if (any A item of B has Id == XXX) 
{ 
    if (A.value > X) 
    { 
    B.Sum += A.Value; 
    A.Value = 0; 
    } 
} 
在一個(原子)操作中使用

B.sum + = A.Value和A.Value = 0需要是原子的。

我完全不知道如何實現它。

有沒有人以前做過類似於MongoDB的事情?

回答

0

正如你知道Mongo沒有交易的概率。 但在你的情況下,我認爲如果你使用noSql的方法很容易解決。所有你需要這樣的具有其中一個對象被包括在陣列內的B對象的單個表:

B的對象 { sum: 0, listA: [ {id: A1, value: 1}, {id: A2, value:2 }], some stuff }

然後你查詢的目的做: db.B.find({"listA.id":"XXX"})

你對B對象做了計算,然後你只需要更新一個B記錄 - 那就是原子

這裏最好解釋一下How to work around the lack of transactions in MongoDB?

+0

所以,基本上2通?一個插入列表中的對象和第二個更新時間? – Thomas

+0

你目前在哪裏存儲A對象? – Mihaela