sql >> Databasteknik >  >> NoSQL >> MongoDB

Infoga dokument i mongodb med autoincrement-fält från java

Följer dokumentationen för att skapa ett automatiskt ökande sekvensfält , anpassar vi den för att användas i Java med Java MongoDB-drivrutinen .

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

}

Särskild uppmärksamhet måste ägnas åt findAndModify metod . I Java MongoDB-drivrutinen (2.12.4) är metoden tillgänglig med 4 olika signaturer.
Du måste använda en som låter dig skicka en query objekt, update objekt och returnNew boolean (som måste ställas in på true ).

Det beror på att enligt dokumentation :
Som standard innehåller det returnerade dokumentet inte de ändringar som gjorts på uppdateringen. För att returnera dokumentet med de ändringar som gjorts på uppdateringen, använd det nya alternativet.

Vi måste returnera dokumentet med de ändringar som gjorts på uppdateringen.



  1. Sortering på Flera fält mongo DB

  2. MongoDB:$eller en fulltextsökning och en $in

  3. metoderna find() och findOne() i MongoDB som visar olika resultat

  4. Uncaught Error:När modifieringsalternativet är sant måste valideringsobjektet ha minst en operator