有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试使用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张唱片。我做错了什么


共 (3) 个答案

  1. # 1 楼答案

    请不要那样做。你不需要创建一个糟糕的管理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();
    }
    

    这将为id创建一个基于时间的索引哈希,它比获取“下一个id”功能强大得多

    https://www.tutorialspoint.com/mongodb/mongodb_objectid.htm

  2. # 2 楼答案

    如何执行像+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();
    
  3. # 3 楼答案

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