我试图实现检查mongoDB中的现有文档,然后我需要使用Java驱动程序3.4更新((不只是旧文档的重复)。
我的代码段是:
// search feed
Document found = database.getCollection("rss_feed").find(new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price)).first();
if (found == null) {
collection.insertOne(new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
mongoClient.close();
System.out.println("Feed not exists in database. Written.");
} else {
System.out.println("Feed exists in database.");
mongoClient.close();
}
但是,通过这种方式,我只添加了新文档而没有更新。 (据我所知,很好的是,集群将在溢出“文档大小” 时检查自身并在没有我的情况下删除旧文档)
当我尝试通过添加签入条件更新旧文档时:
// search feed
Document found = database.getCollection("rss_feed").find(new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price)).first();
if (found == null) {
collection.insertOne(new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
mongoClient.close();
System.out.println("Feed not exists in database. Written.");
} else {
collection.updateOne(eq(found), new Document("title", title)
.append("url", url)
.append("img", img)
.append("price", price));
mongoClient.close();
System.out.println("Feed exists in database. Updated");
mongoClient.close();
}
我得到:
WARNING: Unsupported option 'retrywrites' in the connection string
更新:
如果我使用else if
方法编写count
条件来检查文档数:
else if(collection.count() > 36) {
collection.updateOne(found, new Document("updated title", title)
.append("updated url", url)
.append("updated img", img)
.append("updated price", price));
System.out.println("Feed completely updated in database.");
然后else if
将被跳过:
Feed already exists in database.
Feed already exists in database.
Feed already exists in database.
Feed already exists in database.
Feed already exists in database.
有没有人知道如何写支票文件以更新它们?
答案 0 :(得分:1)
retryWrites
连接参数是根据this在MongoDb 3.6中添加的。正如您自己说的那样,您正在使用3.4版,因此出现了警告。
在代码中的某些地方,您可能有一个类似于以下内容的连接字符串:mongodb://db1.example.net:27017?retryWrites=true
。您要么需要升级到> = 3.6的版本,要么从连接字符串中删除retryWrites
参数,以消除警告。
答案 1 :(得分:0)
有几种方法可以实现它:
有上限的收藏集会自动删除 收集而无需脚本或显式删除操作。
要替换文档,请将新文档传递给replaceOne方法。
使用updateOne / updateMany方法。 就我而言,我只需要更新几个字段,所以我这样写:
collection.updateOne(eq(“ _ id”,user_id),新Document(“ $ set”,新Document(“查看链接”,“开”))));
在某些情况下,您可能需要更新文档中的许多字段,因此替换文档可能更有效。