让我们假设这个结构
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类似的事情?
答案 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?。