sql >> Database >  >> NoSQL >> MongoDB

Document invoegen in mongodb met autoincrement-veld uit java

Volg de documentatie voor het maken van een veld voor automatisch verhogende reeksen , passen we het aan voor gebruik in Java met de Java MongoDB-stuurprogramma .

Voorbeeldimplementatie:

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

}

Er moet speciale aandacht worden besteed aan de findAndModify methode . In het Java MongoDB-stuurprogramma (2.12.4) is de methode beschikbaar met 4 verschillende handtekeningen.
U moet er een gebruiken waarmee u een query kunt doorgeven object, update object en returnNew boolean (die moet worden ingesteld op true ).

Dat komt omdat, volgens documentatie :
Standaard bevat het geretourneerde document niet de wijzigingen die bij de update zijn aangebracht. Gebruik de nieuwe optie om het document terug te sturen met de wijzigingen die zijn aangebracht bij de update.

We moeten het document terugsturen met de wijzigingen die in de update zijn aangebracht.



  1. Mongo C#-stuurprogramma werkt een specifiek element in een geneste array bij

  2. Hoe krijg ik een datum om op te slaan als een datum in MongoDB in plaats van een Int64?

  3. Ontwerppatronen voor gegevenstoegangslaag

  4. Verloren verbinding met mongo db verwerken vanaf nodejs