Làm theo tài liệu để tạo Trường trình tự tăng dần , chúng tôi điều chỉnh nó để được sử dụng trong Java với trình điều khiển Java MongoDB .
Triển khai ví dụ:
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);
}
}
Phải đặc biệt chú ý đến findAndModify
phương pháp . Trong trình điều khiển Java MongoDB (2.12.4), phương pháp này có sẵn với 4 chữ ký khác nhau.
Bạn phải sử dụng một chữ ký cho phép bạn chuyển query
đối tượng, update
đối tượng và returnNew
boolean (phải được đặt thành true
).
Đó là bởi vì theo tài liệu
:
Theo mặc định, tài liệu trả về không bao gồm các sửa đổi được thực hiện trên bản cập nhật. Để trả lại tài liệu với các sửa đổi được thực hiện trên bản cập nhật, hãy sử dụng tùy chọn mới.
Chúng tôi cần trả lại tài liệu với các sửa đổi được thực hiện trên bản cập nhật.