当前位置: 首页 > 面试题库 >

使用Java在mongodb中自动递增序列

微生良策
2023-03-14
问题内容

嗨,我想_id使用Java在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
}
);
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,现在getNextSequence在Java中创建函数,并且此函数具有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集合包含其中包含三个文件nameSarah C. and Bob D.我们手动插入第一次分别与一个默认文档,并将其增加seq这样的{ "_id" : "userid", "seq" : 2 }



 类似资料:
  • 问题内容: 我的架构看起来像这样: 我已经在同一数据库中创建了counters集合,并添加了一个带有’entityId’的_id的页面。从这里我不确定如何使用猫鼬来更新该页面并获取递增编号。 没有计数器的架构,我希望它保持这种状态,因为这实际上不是应用程序使用的实体。仅应在模式中使用它来自动递增字段。 问题答案: 这是一个示例,如何在Mongoose中实现自动增量字段:

  • 现在我想从nodejs插入。我已经试过了,但不起作用

  • 问题内容: 就像在MYSQL中一样,我想要一个递增的ID。 问题答案: MongoDB旨在进行水平扩展。在这种情况下,自动递增将导致id冲突。这就是为什么id看起来更像guid / uuid的原因。

  • 问题内容: Java中的“自动递增”字母-这可能吗?从A到Z而没有第三方库? 问题答案: 是的,您可以这样做: 类型转换也是可能的:

  • 主要内容:使用 counters 集合,创建 Javascript 函数,使用 Javascript 函数MongoDB 中没有像 SQL 中那样可以赋予某个字段自动递增的功能,默认情况下 MongoDB 的 _id 字段是系统自动生成的 12 字节的唯一标识,但是在某些情况下我们可能需要在 MongoDB 的某个字段上实现类似 SQL 中的自动递增功能。 因为 MongoDB 中没有实现这个功能,所以我们需要通过编程的方式来实现。本节中我们将通过两个集合(counters 和 tutorial

  • 问题内容: 我有一个带有主键字段且具有AUTO_INCREMENT的MySQL表。在阅读了这里的其他文章后,我发现人们遇到了同样的问题,答案也各不相同。有些人建议不要使用此功能,其他人则说它不能被“修复”。 我有: 示例:表中的记录数:18.如果我删除记录16、17和18-我希望输入的下一条记录的courseID为16,但是由于最后输入的courseID为18,所以它将为19。 我的SQL知识不是