Java Mongo DB无法获取有效的下一个id
我正在尝试使用Java MongoDB驱动程序在MongoDB中插入一个项目。在插入之前,我正在尝试让nextId插入,但不确定为什么我总是将nextId设为4。在Mongo中插入任何项目之前,我使用下面给定的方法获取nextIdJava 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()
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。您尝试的是关系数据库概念。它只是不同而已。”