Befolgen Sie die Dokumentation zum Erstellen eines automatisch inkrementierenden Sequenzfelds , wir passen es für die Verwendung in Java mit dem Java MongoDB-Treiber an .
Beispielimplementierung:
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);
}
}
Besondere Aufmerksamkeit muss dem findAndModify
geschenkt werden Methode . Im Java MongoDB-Treiber (2.12.4) ist die Methode mit 4 verschiedenen Signaturen verfügbar.
Sie müssen eine verwenden, mit der Sie eine query
übergeben können Objekt, update
Objekt und returnNew
boolean (der auf true
gesetzt werden muss ).
Das liegt daran, laut Dokumentation
:
Standardmäßig enthält das zurückgegebene Dokument nicht die beim Update vorgenommenen Änderungen. Um das Dokument mit den beim Update vorgenommenen Änderungen zurückzugeben, verwenden Sie die neue Option.
Wir müssen das Dokument mit den am Update vorgenommenen Änderungen zurücksenden.