Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java驱动程序对MongoDB集合执行保存操作?_Java_Mongodb - Fatal编程技术网

如何使用Java驱动程序对MongoDB集合执行保存操作?

如何使用Java驱动程序对MongoDB集合执行保存操作?,java,mongodb,Java,Mongodb,我只是从Python转换过来,需要继续使用MongoDB数据库。一项特殊任务是将传入的文档(在本例中为tweet)保存到一个集合中进行归档。tweet可能会出现多次,因此我更喜欢使用save()而不是insert(),因为如果文档已经存在于集合中,则前者不会引发错误。但是MongoDB的Java驱动程序似乎不支持保存操作。我错过什么了吗 编辑:作为参考,我使用这个库'org.mongodb:mongodb驱动程序:3.0.2' 示例代码: MongoCollection<Document&

我只是从Python转换过来,需要继续使用MongoDB数据库。一项特殊任务是将传入的文档(在本例中为tweet)保存到一个集合中进行归档。tweet可能会出现多次,因此我更喜欢使用
save()
而不是
insert()
,因为如果文档已经存在于集合中,则前者不会引发错误。但是MongoDB的Java驱动程序似乎不支持保存操作。我错过什么了吗

编辑:作为参考,我使用这个库
'org.mongodb:mongodb驱动程序:3.0.2'

示例代码:

MongoCollection<Document> tweets = db.getCollection("tweets");
...
Document tweet = (Document) currentDocument.get("tweet");
tweets.insertOne(tweet);
MongoCollection tweets=db.getCollection(“tweets”);
...
Document tweet=(Document)currentDocument.get(“tweet”);
tweets.insertOne(tweet);
最后一行在tweet已存在时引发此错误:


线程“main”com.mongodb.MongoWriteException:insertDocument::引起的::11000 E11000重复键错误索引:db.tweets.$\u id\u dup key:{:ObjectId('55a403b87f03045e84747eb')}
使用3.x mongodb Java驱动程序,您可以使用
MongoCollection#replaceOne(文档、文档、更新选项)
像这样:

MongoClient mongoClient = ...
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> tweets = db.getCollection("tweets");
...
Document tweet = (Document) currentDocument.get("tweet");
tweets.replaceOne(tweet, tweet, new UpdateOptions().upsert(true));
public static void save(MongoCollection<Document> collection, Document document) {
    Object id = document.get("_id");
    if (id == null) {
        collection.insertOne(document);
    } else {
        collection.replaceOne(eq("_id", id), document, new UpdateOptions().upsert(true));
    }
}

使用3.x MongoDB Java驱动程序,您可以像这样使用
MongoCollection#replaceOne(文档、文档、更新选项)

MongoClient mongoClient = ...
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> tweets = db.getCollection("tweets");
...
Document tweet = (Document) currentDocument.get("tweet");
tweets.replaceOne(tweet, tweet, new UpdateOptions().upsert(true));
public static void save(MongoCollection<Document> collection, Document document) {
    Object id = document.get("_id");
    if (id == null) {
        collection.insertOne(document);
    } else {
        collection.replaceOne(eq("_id", id), document, new UpdateOptions().upsert(true));
    }
}

不,无法编译,因为方法不存在。作为参考,我正在使用这个库'org.mongodb:mongodb driver:3.0.2'尝试
org.mongodb:mongo java driver
,查看我的更新答案。我再次更新了答案。显然,您使用的是
MongoDatabase
,您应该使用
com.mongodb.DB
。我尝试使用3.x版的驱动程序,因为它有一个更合理的API imho,但到目前为止,似乎只有在2.x中才能使用
save
(这很愚蠢。不过,感谢您的回答,投了赞成票(为了防止有新信息的人发现这个问题,我会再多问一点)我找到了3.x方法,请参阅我的更新答案。不,无法编译,因为该方法不存在。作为参考,我正在使用此库“org.mongodb:mongodb driver:3.0.2”尝试
org.mongodb:mongo java driver
,请参阅我的更新答案。我再次更新了我的答案。显然,您应该使用的是
MongoDatabase
com.mongodb.DB
。我正试图使用3.x版的驱动程序,因为它有一个更合理的API imho,但到目前为止,似乎只有在2.x版中才能实现
save
:(这很愚蠢。不过,感谢你的回答,投票结果是一致的(为了防止有新信息的人发现这个问题,我会继续提问)我找到了3.x的方法,请看我的更新答案。