mongo 中的序列 - 可以依赖 findAndModify() 吗?

Sequence in mongo - can rely on findAndModify()?

我需要一些持久性整数 ID,用于每秒调用大约 100 次的操作。我在设置集合中有一个文档,其中 id 存储在 lastId 字段中。

根据 mongodb doc 我想使用带有 update: { $inc: { lastId: 1 } } 参数的 findAnyModify() 操作来实现它。我可以相信每次下一次呼叫 returns 一个新的(增加的)号码吗?

还是使用 java AtomicLong 计数器作为解决方法更好?它将在开始时从 mongo 读取 lastId,并且在每次增量时我将从 mongo?

写入(但不读取)

如果您需要 mongodb 中的持久序列,您确实需要使用运算符 $inc 以便在服务器端自动递增您将用作计数器的给定字段。

如果你使用 AtomicLong,你将很难保证序列的一致性(尤其是在集群环境中),这样你可能会遇到多个文档最终使用相同 id 的情况.