MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Insérer un document dans mongodb avec un champ d'auto-incrémentation à partir de Java

Suivre la documentation pour créer un champ de séquence à incrémentation automatique , nous l'adaptons pour être utilisé en Java avec le pilote Java MongoDB .

Exemple de mise en œuvre :

import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class TestAutoIncrement {

private final static String DB_NAME = "MyTestDB";
private final static String TEST_COLLECTION = "testCollection";
private final static String COUNTERS_COLLECTION = "countersCollection";

public static DBCollection testCollection;
public static DBCollection countersCollection;

public static void main(String[] args) {

    try {
        MongoClient mongoClient = new MongoClient();
        DB database = mongoClient.getDB(DB_NAME);
        testCollection = database.getCollection(TEST_COLLECTION);
        countersCollection = database.getCollection(COUNTERS_COLLECTION);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }

    if (countersCollection.count() == 0) {
        createCountersCollection();
    }

    createTestCollection();
}

public static void createCountersCollection() {

    BasicDBObject document = new BasicDBObject();
    document.append("_id", "userid");
    document.append("seq", 0);
    countersCollection.insert(document);
}

public static Object getNextSequence(String name) {

    BasicDBObject searchQuery = new BasicDBObject("_id", name);
    BasicDBObject increase = new BasicDBObject("seq", 1);
    BasicDBObject updateQuery = new BasicDBObject("$inc", increase);
    DBObject result = countersCollection.findAndModify(searchQuery, null, null,
            false, updateQuery, true, false);

    return result.get("seq");
}

public static void createTestCollection() {

    BasicDBObject document = new BasicDBObject();
    document.append("_id", getNextSequence("userid"));
    document.append("name", "Sarah");
    testCollection.insert(document);

    document = new BasicDBObject();
    document.append("_id", getNextSequence("userid"));
    document.append("name", "Bob");
    testCollection.insert(document);

    document = new BasicDBObject();
    document.append("_id", getNextSequence("userid"));
    document.append("name", "Alex");
    testCollection.insert(document);
  }

}

Une attention particulière doit être portée au findAndModify méthode . Dans le driver Java MongoDB (2.12.4), la méthode est disponible avec 4 signatures différentes.
Vous devez en utiliser une qui permet de passer une query objet, update objet et returnNew booléen (qui doit être défini sur true ).

En effet, selon la documentation :
Par défaut, le document retourné n'inclut pas les modifications apportées à la mise à jour. Pour retourner le document avec les modifications apportées à la mise à jour, utilisez la nouvelle option.

Nous devons retourner le document avec les modifications apportées à la mise à jour.