繁体   English   中英

使用java在mongodb中自动增加序列

[英]Auto increment sequence in mongodb using java

嗨,我想使用java在mongodb中自动增加_id 我对此完全陌生。 在文档中,我找到了这样的解决方案:

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


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

db.users.insert(
{
_id: getNextSequence("userid"),
name: "Sarah C."
}
)

任何人都可以建议我如何使用java做到这一点? 我对此完全陌生。

首先使用创建自动递增序列字段,您应该使用mongoDB shell创建集合,集合应该如下:

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

所以你得到的counters集合包含像_id,seq这样的字段,现在在java中创建getNextSequence函数,这个函数将参数userid作为字符串,所以getNextSequence函数如下:

public static Object getNextSequence(String name) throws Exception{
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    // Now connect to your databases
    DB db = mongoClient.getDB("demo");
    DBCollection collection = db.getCollection("counters");
    BasicDBObject find = new BasicDBObject();
    find.put("_id", name);
    BasicDBObject update = new BasicDBObject();
    update.put("$inc", new BasicDBObject("seq", 1));
    DBObject obj =  collection.findAndModify(find, update);
    return obj.get("seq");

}

上面的函数返回seq计数并在main方法中使用此函数,如:

public static void main(String[] args) throws Exception {

    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    // Now connect to your databases
    DB db = mongoClient.getDB("demo");
    DBCollection collection = db.getCollection("counters");
    BasicDBObject document = new BasicDBObject();

    document.put("_id", getNextSequence("userid"));
    document.put("name","Sarah C.");
    collection.insert(document); // insert first doc

    document.put("_id", getNextSequence("userid"));
    document.put("name", "Bob D.");
    collection.insert(document); // insert second doc
}

现在,在counters集合中包含三个文件,其中包含Sarah C. and Bob D. nameSarah C. and Bob D.我们第一次手动插入的一个默认文档,它增加seq{ "_id" : "userid", "seq" : 2 }

DBCollection collection = database.getCollection("Table Name");

DBObject modifier = new BasicDBObject("counter", 1);
DBObject incQuery = new BasicDBObject("$id", modifier);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM