gpt4 book ai didi

java - 使用 Java 驱动程序查找和更新插入

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

我正在尝试将代码从旧的 MongoDB 驱动程序迁移到最新版本。在旧版本中,我们有这样的东西:

BasicDBObject query = new BasicDBObject("foo", "foo");
int value = 1;
BasicDBObject field = new BasicDBObject("seq", value);
BasicDBObject update = new BasicDBObject("$inc", field);
DBObject o = getDBCollection().findAndModify(query, null, null, false, update, true, true);

如果“foo”文档不存在,那么将创建它。如果它确实存在,seq 的值将增加。

根据我可以确定使用 MongoCollection 做同样的事情,我需要使用 replaceOne 并做这样的事情:

Document query = new Document("foo", "foo");
int value = 1;
Document field = new Document("seq", value);
Document update = new Document("$inc", field);
UpdateOptions options = new UpdateOptions().upsert(true);
UpdateResult ret = getMongoCollection().replaceOne(query, update, options);

但这会给出 java.lang.IllegalArgumentException: Invalid BSON field name $inc

最佳答案

没有。你要.findOneAndUpdate() :

FindOneAndUpdateOptions options = new FindOneAndUpdateOptions()
.upsert(true)
.returnDocument(ReturnDocument.AFTER);

UpdateResult ret = getMongoCollection().findOneAndUpdate(query, update, options);

.replaceOne() 就是这个意思,用提供的内容“替换”整个文档(_id 除外)。这意味着此处不允许使用像 $inc 这样的修饰符。

因此您改用 .findOneAndUpdate()。请注意,您可能希望 ReturnDocument.AFTER 在应用更新之前返回“修改后的”文档而不是“原始”文档,这将是默认操作。

关于java - 使用 Java 驱动程序查找和更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368136/

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