【问题标题】:how can I auto increment a field in mongodb using java code?如何使用 java 代码自动增加 mongodb 中的字段?
【发布时间】:2013-12-12 10:18:23
【问题描述】:

我有一个带有“commentId”字段的 cmets 表。我在这个字段上创建了一个索引。 我不知道如何插入新文档,并且 commentId 字段应该在插入每个新文档时自动递增。有什么办法可以实现吗?

【问题讨论】:

  • 检索最大值并添加 +1 或使该列成为自增的表达式
  • 检索最大值并增加它需要更多的代码行。没有它有什么办法吗?我没有得到你的第二个建议。你能详细说明一下吗?
  • 这里记录了您可以获得的最接近的值:docs.mongodb.org/manual/tutorial/… 但请注意警告。
  • @SachinVerma-SQL 与 NoSql DB MongoDb 有什么关系?

标签: java mongodb


【解决方案1】:

MongoDB 自动为插入其中的每个对象创建一个 id。您无需创建自己的 id。

如果您确实需要一个递增的整数 id,那么您会遇到各种分布式同步问题 - 实际上很难在不平凡的情况下正确处理。

我能想到的最简单的方法来生成唯一的 id:

  • 在具有唯一约束的 id 列上放置索引。
  • 要在索引上插入文档查询以获取最大数字,加 1,将其用作 id。
  • 如果插入因重复索引重试而失败

它涉及一些往返,但应该是健壮的,并且索引到位非常快。

如果您只有一个写这些的位置,您可以在本地兑现 AtomicInteger 中的 id,并且只有在检测到碰撞时才执行完整的往返过程,然后更新 AtomicInteger。

【讨论】:

  • 我知道 Tim,但我的实现需要一个唯一的 ID,除了 mongo 生成的对象 ID。这就是为什么我们有索引的概念。但我没有找到任何解决方案。
  • 但是,如果每秒有很多插入怎么办?您可能会遇到很多错误,并且会降低性能。使用另一个集合来存储序列是更好的选择,(请参阅此问题的 cmets 中的@WiredPrairie 链接)。
猜你喜欢
  • 2013-11-18
  • 2016-01-13
  • 2014-12-25
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多