当前位置: 首页 > 知识库问答 >
问题:

UpdateOneModel替换mongodb java驱动程序中的现有文档

班安平
2023-03-14
    List<WriteModel<Document>> updateList = 
            new ArrayList<WriteModel<Document>>(documents.size());

    documents.stream().forEach((document) -> {
        updateList.add(new UpdateOneModel<Document>(
                new Document().append("accountNum", 
                                       document.get("accountNum")),
                new Document().append("$set", document)));
    });


    BulkWriteResult result = securitiesCollection.bulkWrite(updateList,
            MongoDbConstants.ORDERED_OPTION_FALSE);

在上面的代码中,我试图更新文档中的属性子集。更新后,我看到整个文档被子集替换了。有没有办法用mongo-java-driver的bulkwrite操作来更新属性子集?

共有2个答案

程凯定
2023-03-14

UpdateOneModel 按预期更新,我实际上正在将空值填充到其他属性,这就是其他属性更新为 null 的原因。

云宾鸿
2023-03-14

如果只想更新某些字段,请不要设置整个对象:

new Document().append("$set", document)));

相反,请仅设置您需要的字段:

new Document().append("$set", new BasicDBObject("field1",document.getField1()).append("field2", document.getField2());
 类似资料:
  • 我的目标是使用聚合框架创建一个管道来对我的数据进行分组,然后将这个管道与java驱动程序一起使用。MongoDB v4.0.3 我使用MongoDB Compass创建了以下管道(减少到重要部分): 这导致以下(生成的)Java代码: 集合中$组阶段之前的数据如下所示: $组阶段应返回以下数据结构: 问题所在 Mongo Compass按预期预览了阶段的结果,但使用java驱动程序的阶段的结果非常

  • 我正在尝试编写一个Java函数,将单词列表插入到集合中。我想为每个单词的唯一字段“单词”一个文档。我要插入的单词列表包含许多重复的单词,所以我希望我的函数只在集合中没有具有相同“word”值的文档时才插入文档。如果已经有一个具有相同“单词”值的文档,该函数不应该改变或替换这个文档,而是继续插入我的列表中的下一个单词。 我在字段“word”上创建了一个索引,以避免重复的文档并捕获重复的键Except

  • 对于ex,当我的chrome放在Compand提示符中时,会给出路径-/applications/google\chrome.app system.setproperty(“webdriver.chrome.driver”,“/applications/google/chrome.app”);WebDriver driver=new ChromeDriver(); driver.get(“http

  • 我假设Selenium打开的chrome浏览会话将与google chrome本地安装相同。但是当我尝试在这个网站上搜索时,即使只是用selenium打开它并手动控制搜索过程,我会得到一个错误信息,当我使用常规chrome与我自己的个人资料或在incognito窗口中搜索结果返回良好。每当我搜索这个问题,我发现结果指出鼠标移动或点击模式提供它。但情况并非如此,因为我在打开浏览器后尝试手动控制。ht

  • 介绍 首先让我介绍一下我要做的事情的目标。 > 之前我把一个文件分成两部分 这两个文件的大小加在一起可能超过50 MB(作为一个长期目标)。由于UrlFetchApp.fetch()对请求的大小有限制,我想单独上传它们,其中每个文件将小于50 MB,并因此合并它们。现在(尝试驱动器API),我使用小文件。 第一个文件是 (是 ) 。我意识到我之前犯了一个错误,即我使用的文件大小是256的倍数,但它

  • 问题内容: 我正在尝试使用JDBC驱动程序将android应用程序连接到服务器(PostgreSQL),但是出现此错误: 我尝试了很多事情,例如在路径中添加驱动程序的地址,但没有任何效果。我遵循了本教程:http : //appliedcoffeetechnology.tumblr.com/post/10657124340,并在构建路径中添加了驱动程序JDBC4(我也尝试过JDBC3)。 每个人都