MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wstaw dokument do mongodb z polem autoinkrementacji z java

Zgodnie z dokumentacją dotyczącą tworzenia pola sekwencji autoinkrementacji , dostosowujemy go do użycia w Javie ze Java MongoDBsterownikiem .

Przykładowa implementacja:

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

}

Należy zwrócić szczególną uwagę na findAndModify metoda . W sterowniku Java MongoDB (2.12.4) metoda jest dostępna z 4 różnymi sygnaturami.
Musisz użyć takiego, który pozwoli Ci przekazać query obiekt, update object i returnNew wartość logiczna (która musi być ustawiona na true ).

To dlatego, że według dokumentacji :
Domyślnie zwracany dokument nie zawiera modyfikacji wprowadzonych podczas aktualizacji. Aby zwrócić dokument ze zmianami wprowadzonymi podczas aktualizacji, użyj nowej opcji.

Musimy zwrócić dokument ze zmianami wprowadzonymi podczas aktualizacji.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak działają moduły ansible mongodb_user,mongodb_replicaset?

  2. rzadkie indeksy i wartości null w mongo

  3. Nazwa dynamicznej kolekcji Nodejs mongodb

  4. Mangusta nie zapisuje zagnieżdżonego obiektu

  5. E:Nie można znaleźć pakietu mongodb-org