MongoDB C# - 如何更新数组中的元素

时间:2017-07-03 21:05:59

标签: mongodb

让我们假设这个结构

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

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

我有一个带对象B的Mongo表

我需要做的是以下伪代码:

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类似的事情?

1 个答案:

答案 0 :(得分:0)

因为你知道Mongo没有交易。 但在你的情况下,我认为如果你使用noSql方法很容易解决。您需要的只有一个B对象表,其中A对象包含在数组中:

一个B对象     { sum: 0, listA: [ {id: A1, value: 1}, {id: A2, value:2 }], some stuff }

然后查询A对象:    db.B.find({"listA.id":"XXX"})

你在B对象上进行计算,然后你只需要更新一条B记录 - 那就是原子

这里有更好的解释How to work around the lack of transactions in MongoDB?