原文链接:http://duoyun.org/topic/50caa33fee680fee79000c82
这个大神用了不同的语言实现,我只写下java的demo,但是思想都是一样的。
MongoDB中有时候会需要自增长id,而不是他自维护的id,这样方便逻辑实现。
他的思想是利用mongodb中$inc操作,这个操作可以自增加1,并且是原子性操作,线程安全。
一开始的思想是利用java把javascript代码执行到mongodb中,再调用js function获取返回值。可是网上查的貌似没有这种方法。
于是就利用javaapi自带的方法。具体代码如下:
public static Object autoIncre(DB db, String seq){
DBCollection auto = db.getCollection(seq) ;
BasicDBObject query = new BasicDBObject() ;
query.put("_id", "auto_increment_id") ;
BasicDBObject increment = new BasicDBObject("next", 1) ;
BasicDBObject update = new BasicDBObject("$inc", increment) ;
DBObject result = auto.findAndModify(query, new BasicDBObject(),
new BasicDBObject(), false, update, true, true) ;
double x = Double.valueOf(result.get("next").toString()) ;
return x ;
}
> db.auto_id.find() ;
{ "_id" : "auto_increment_id", "next" : 1 }
用起来还挺方便。