我怎样才能创build一个meteor的自动增量字段?

我需要一个自动递增字段,但不是主要的id,它只是为客户支持应用程序的用户提供一个容易记住的案例号码。

我发现这篇文章解释了如何在mongodb上创build一个自动递增字段http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/,但是这个解决scheme在minimongo上还不被支持。

我怎样才能实现这个function? 我不在乎解决scheme是否由于错误而跳过了一些连续的案例编号,但案例编号必须是唯一的。

是否有另一种方法来生成唯一的和短的病例号码? 我不想给用户一个这样的案例代码PxyooJWSKc3sMz6Lc,因为他们必须参考他们的案件编号的问题。

编辑:

Minimong不支持findAndModify,所以我不能使用我发布的链接上列出的第一个解决scheme。 第二种解决scheme也需要方法在minimongo上不可用。

使用mongo-counter包 ,可以用方法incrementCounter(name)创build一个增量。 该实现基于创build一个自动递增序列字段,直接访问数据库而不经过meteor收集。

 Meteor.methods({ 'addRecord':function(doc) { doc.id = incrementCounter('docId'); MyCollection.insert(doc); return doc.id; } }); 

更新

大气中有新的mongo计数器包 ,可能比我最初的build议要好。

那么有几种方法可以做到这一点。 如果你需要它是绝对一致的,你可以将当前的整数存储在你的集合中,并使用Meteor.call添加一条新logging,而不是从客户端进行。

例如

服务器端JS

 Meteor.methods({ 'addRecord':function(doc) { currentId = MyCollection.findOne({},{sort:{id:-1}}).id || 1; doc.id = currentId + 1; MyCollection.insert(doc); return doc.id; } }); 

客户端js

 doc = {name:"Bob"} //MyCollection.insert(doc) //Use this instead Meteor.call("addRecord", doc, function(err,result) { if(result) { console.log("Successfully added new record with auto_inc id " + result); } } 

用Meteor来做,你会失去一件事:延迟补偿。

其他可能性

你可以存储一些从Unix时间戳build立的东西,并缩短到更适用的东西(例如,通过切断前几位):

 new Date().getTime().toString().substr(4)