当前位置: 首页 > 面试题库 >

使用MongoDB Java 3.0驱动程序进行批量上传

景阳曜
2023-03-14
问题内容

在早期版本的MongoDB Java驱动程序中,要运行查询并对结果进行无序批量增补,我们要做的就是:

BulkWriteOperation bulk = dbCollection.initializeUnorderedBulkOperation();
    bulk.find(searchQuery).upsert().update(new BasicDBObject("$set", getDbObjectModel()));

但是在版本3中,随着Bson Document支持和MongoCollection.bulkWrite()方法的引入,该怎么做?

我尝试了这个:

List<WriteModel<Document>> documentList = new ArrayList<>();

collection.bulkWrite(documentList, new BulkWriteOptions().ordered(false));

但是,我需要upsert功能

谢谢。


问题答案:

您仍然可以使用所有功能,只是BulkWrites现在具有不同的语法:

    MongoCollection<Document> collection = db.getCollection("sample");

    List<WriteModel<Document>> updates = Arrays.<WriteModel<Document>>asList(
        new UpdateOneModel<Document>(
                new Document(),                   // find part
                new Document("$set",1),           // update part
                new UpdateOptions().upsert(true)  // options like upsert
        )
    );

    BulkWriteResult bulkWriteResult = collection.bulkWrite(updates);

因此,您可以使用UpdateOneModel(或如果需要,可以使用很多),并将设置UpdateOptions为构造函数的第三个参数。

需要一些时间来适应,但是基本上它只是使用与其他地方相同的语法来构建“列表”。我想这就是改变的主要原因。



 类似资料:
  • 问题内容: 我已经为MongoDB和Cassandra构建了一个导入器。基本上,导入程序的所有操作都是相同的,除了最后一部分中,数据的形成与所需的cassandra表架构和所需的mongodb文档结构相匹配。与MongoDB相比,Cassandra的写入性能确实很差,我想我做错了。 基本上,我的抽象导入程序类加载数据,读出所有数据,并将其传递给扩展的MongoDBImporter或Cassandr

  • 为Electron应用编写自动测试, 你需要一种 "驱动" 应用程序的方法。 Spectron 是一种常用的解决方案, 它允许您通过 WebDriver 模拟用户行为。 当然,也可以使用node的内建IPC STDIO来编写自己的自定义驱动。 自定义驱动的优势在于,它往往比Spectron需要更少的开销,并允许你向测试套件公开自定义方法。 我们将用 Node.js 的 child_process

  • 为Electron应用编写自动测试, 你需要一种 "驱动" 应用程序的方法。 Spectron is a commonly-used solution which lets you emulate user actions via WebDriver. 当然,也可以使用node的内建IPC STDIO来编写自己的自定义驱动。 自定义驱动的优势在于,它往往比Spectron需要更少的开销,并允许你向

  • 我需要使用Datastax Java驱动程序将Batches写入Cassandra,这是我第一次尝试将batch与Datastax Java驱动程序一起使用,因此我感到有些困惑- 下面是我的代码,我试图在其中创建一个语句对象并将其添加到Batch并将ConsistencyLevel设置为QUORUM。 下面是我的类 - 现在我的问题是-我使用Batch插入带有DatastaxJava驱动程序的ca

  • 问题内容: 我正在使用Java MongoDB驱动程序3.3版使用Mongo Aggregation Framework。我有一个 聚集管道 ,这只是类型的集合。我试图找到一种方法来漂亮地打印管道的每个阶段。 在每个元素上调用方法是不够的,因为每个阶段都是接口的简单实现的实例。这个愚蠢的类没有任何方法的覆盖。 使用mongo java驱动程序类的工厂方法创建管道,如下所示: Javadoc可以在这

  • 我有一个Cassandra的单节点实例。我一直在使用Java中的datastax驱动程序使用批处理语句向其中插入大量数据。 在插入过程中的某个点之后,我会看到一个NoHost可用异常,但是我仍然可以通过cql连接到节点并执行语句。Cassandra 日志警告我,批处理太大,当我将大小降低到建议的水平时,我仍然收到相同的错误,并且 Cassandra 日志文件中似乎没有其他错误。 以前有人遇到过这个