我是Mongo的新手。我想基于多个标准原子地插入文档。该文件如下所示:
{_id:..., hourOfTime:..., total:..., max:..., min:..., last:...}
这基本上是由_id
标识的项目的点击次数的每小时汇总。每五秒钟,每个项目的点击次数将从应用程序刷新到MongoDB。因此,文档需要每五秒更新一次。
情况就是这样。让我们在t=t0
说{_id:"nike", total:123, max:10, min:3, last:9}
,然后在t=t1
,我收到消息{_id:"nike", count: 12}
。现在,对于_id="nike"
,我需要执行以下操作,
total
12
max < 12
,请更新max=12
min > 12
,请更新min=12
last=12
我希望所有这些操作都是原子的。我无法在一个查询中转换它。任何帮助/提示都表示赞赏。
答案 0 :(得分:1)
单个查询无法完成此操作。我将如何做到这一点:
locked
的文档上有一个字段。如果findAndModify
字段为false,则运行locked
以获取文档,并将锁定字段设置为锁定的Date()
。这将阻止其他应用程序实例修改文档,前提是它们还会检查locked
字段。locked
设置为false。
只要修改文档的任何内容在findAndModify
字段上运行locked
,整个修改就应该是原子的。确保锁定超时的阈值,以便在机器爆炸时文档不会无限期锁定。这意味着当第二次更新文档(并释放锁定)时,应用程序应确保文档中的日期符合预期,以确保它仍然具有锁定。