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.