我正在用Java开发Web应用程序,并使用Morphia在MongoDB上存储一些数据。
除了ObjectId,我还需要为集合的每个文档都保留一个顺序值。此顺序值在集合中必须唯一。

我的第一种方法是创建一个仅存储顺序值的集合,并同步获取和增加该值的方法。

有更好的方法吗?

最佳答案

通常,在MongoDB中,您不会使用自动递增模式,因为它无法扩展到包含大量文档的数据库。但是,可以通过使用单独的计数器集合来跟踪使用的最后一个数字序列来执行此操作:

db.counters.insert(
  {
     _id: "userid",
      seq: 0
   }
  )


然后,您可以创建一个函数,该函数将返回序列中的下一个数字:

function getNextSequence(name) {
  var ret = db.counters.findAndModify(
         {
           query: { _id: name },
           update: { $inc: { seq: 1 } },
           new: true
         }
  );

08-03 23:48