在mongodb中更新嵌套文档(Java驱动程序)

时间:2019-01-20 09:04:35

标签: java mongodb

通过MongoDB Java驱动程序更新子文档时遇到问题。

文档结构为

{
    "_id" : ObjectId("5c442474c1c50dbe19898e27"),
    "address" : {
            "apartmentName" : "apartment 1",
            "apartmentNo" : 1
    },
    "entityId" : "Id1",
    "entityName" : "Name1"
}

我正在从Pojo-'pojoObject'更新文档,如下所示:

ObjectMapper mapper=JsonFactory.create();
    String jsonString = mapper.toJson(pojoObject);
    Document doc=new Document("$set",Document.parse(jsonString));
    database.getCollection("CollectionName",pojoObject.getClass())
        .updateOne(Filters.eq("entityId",pojoObject.getEntityId()),doc);

现在,如果我的pojo字段如下所示(其他字段为null),它将正确更新“ entityName”。

Fields- {"entityName":"Name2","entityId":"Id1"}


{
    "_id" : ObjectId("5c442c0fc1c50dbe19898e59"),
    "address" : {
            "apartmentNo" : 1,
            "apartmentName" : "apartment 1"
    },
    "entityId" : "Id1",
    "entityName" : "Name2"}

但是,如果我仅更新子文档中的一个术语(其他字段为null),则会替换整个子文档。

   Fields- {"entityId":"Id1","address":{"apartmentNo":5}}


{
    "_id" : ObjectId("5c442c0fc1c50dbe19898e59"),
    "address" : {
            "apartmentNo" : 5
    },
    "entityId" : "Id1",
    "entityName" : "Name2"
}

即。 apartmentName字段也被替换。

有没有一种方法可以更新apartmentNumber而不替换子文档中的其他字段?

预先感谢:D

更新

pojoObject的创建如下:

PojoObject pojoObject = new PojoObject();
    pojoObject.setEntityId("Id1");
    pojoObject.setEntityName(null);
    Address address=new Address();
    address.setApName(null);
    address.setApNo(12);
    pojoObject.setAddress(address);

0 个答案:

没有答案