Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mongo DB无法获取有效的下一个id_Java_Spring_Mongodb - Fatal编程技术网

Java Mongo DB无法获取有效的下一个id

Java Mongo DB无法获取有效的下一个id,java,spring,mongodb,Java,Spring,Mongodb,我正在尝试使用Java MongoDB驱动程序在MongoDB中插入一个项目。在插入之前,我正在尝试让nextId插入,但不确定为什么我总是将nextId设为4。在Mongo中插入任何项目之前,我使用下面给定的方法获取nextId private Long getNextIdValue(DBCollection dbCollection) { Long nextSequenceNumber = 1L; DBObject query = new BasicDBObject()

我正在尝试使用Java MongoDB驱动程序在MongoDB中插入一个项目。在插入之前,我正在尝试让nextId插入,但不确定为什么我总是将nextId设为4。在Mongo中插入任何项目之前,我使用下面给定的方法获取nextId

 private Long getNextIdValue(DBCollection dbCollection) {

    Long nextSequenceNumber = 1L;

    DBObject query = new BasicDBObject();
    query.put("id", -1);

    DBCursor cursor = dbCollection.find().sort(query).limit(1);

    while (cursor.hasNext()) {
        DBObject itemDBObj = cursor.next();
        nextSequenceNumber = new Long(itemDBObj.get("id").toString()) + 1;
    }

    return nextSequenceNumber;
}

我的mongodb收藏中总共有13张唱片。我做错了什么?

请不要这样做。您不需要创建糟糕的管理id情况,因为驱动程序已经以最佳方式完成了这一工作,只需为字段使用正确的类型和注释即可:

@Id
@ObjectId
private String id;
然后编写一个通用方法来插入所有图元:

public T create(T entity) throws MongoException, IOException {

    WriteResult<? extends Object, String> result = jacksonDB.insert(entity);

    return (T) result.getSavedObject();
}
公共T创建(T实体)抛出MongoException、IOException{
WriteResult如何执行像+1到字符串这样的算术运算

 nextSequenceNumber = new Long(itemDBObj.get("id").toString()) + 1;
尝试创建这样的序列集合

{"id":"MySequence","sequence":1}
然后使用Update增加id

// Query for sequence collection
Query query = new Query(new Criteria().where("id").is("MySequence"));

//Increment the sequence by 1
Update update = new Update();
update.inc("sequence", 1);

FindAndModifyOptions findAndModifyOptions = new FindAndModifyOptions();
findAndModifyOptions.returnNew(true);

SequenceCollection sequenceCollection = mongoOperations.findAndModify(query, update,findAndModifyOptions, SequenceCollection.class);
return sequenceModel.getSequence();

我找到了使用b.collection.count()的解决方法。我只需找到总计数并递增1即可将id分配给我的对象。

使用db.collection.count()来获取集合中的文档数,并将结果递增1以获取下一个id。强烈建议不要对文档id使用递增整数;声明如下:“通常在MongoDB中,您不会对_id字段或任何字段使用自动递增模式,因为它不会对包含大量文档的数据库进行缩放。”。我需要数字自定义自动递增id作为1,2,3,4您将无法将其用作“id”或“_id”“因为它与内部驱动程序实现相关。因此,如果您想创建另一个名为“ordinal”或其他任何东西。但不要试图强制以错误的方式在NoSQL上下文中使用id。您尝试的是关系数据库概念。它只是不同而已。”