UpdateOneModel替换mongodb java-driver中的现有文档

时间:2018-05-31 15:14:19

标签: mongodb mongo-java mongo-java-driver

    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 个答案:

答案 0 :(得分:0)

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

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

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

new Document().append("$set", new BasicDBObject("field1",document.getField1()).append("field2", document.getField2());

答案 1 :(得分:0)

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