gpt4 book ai didi

java - 使用来自java的自动增量字段在mongodb中插入文档

转载 作者:可可西里 更新时间:2023-11-01 09:20:20 26 4
gpt4 key购买 nike

我试图在一个事务中从 java 中插入一个带有序列号的文档。

类似的东西:

function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);

return ret.seq;
}
collection.insert({
number: getNextSequence("userid"),
name: "Some Name"
});

是否可以从 java 中执行此操作?最好使用官方 java 驱动程序。

最佳答案

遵循 creating an Auto-Incrementing Sequence Field 的文档,我们将其改编为在 Java 中与 Java MongoDB driver 一起使用.

示例实现:

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

}

必须特别注意findAndModify 方法。在 Java MongoDB 驱动程序 (2.12.4) 中,该方法具有 4 种不同的签名。
您必须使用一个可以让您传递 query 对象、update 对象和 returnNew boolean 值(必须设置为 true)。

那是因为,根据documentation :
默认情况下,返回的文档不包括对更新所做的修改。要返回包含更新修改的文​​档,请使用新选项。

我们需要返回包含更新修改的文​​档。

关于java - 使用来自java的自动增量字段在mongodb中插入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26631396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com