sql >> Database teknologi >  >> NoSQL >> MongoDB

Indsæt dokument i mongodb med autoincrement felt fra java

Følger dokumentationen for oprettelse af et automatisk inkrementerende sekvensfelt , tilpasser vi den til brug i Java med Java MongoDB-driveren .

Eksempel på implementering:

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);
  }

}

Der skal lægges særlig vægt på findAndModify metode . I Java MongoDB-driveren (2.12.4) er metoden tilgængelig med 4 forskellige signaturer.
Du skal bruge en, som lader dig sende en query objekt, update objekt og returnNew boolean (som skal indstilles til true ).

Det skyldes, ifølge dokumentation :
Som standard inkluderer det returnerede dokument ikke de ændringer, der er foretaget på opdateringen. For at returnere dokumentet med de ændringer, der er foretaget på opdateringen, skal du bruge den nye mulighed.

Vi skal returnere dokumentet med de ændringer, der er foretaget på opdateringen.



  1. $push i MongoDb virker ikke?

  2. MongoDB .NET-drivergruppe efter tidsinterval

  3. Mongoose:findOneAndUpdate returnerer ikke opdateret dokument

  4. Sender afkrydsningsfeltværdier til databasen ved hjælp af JavaScript