通过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);