1
Morphia를 사용하면 배열에 포함 된 객체에 saveOrUpdate/upsert 작업을 수행 할 수 있습니까?morphia : upsert on 배열에 포함 된 객체
{
_id : "abcd",
myArray : [{
"key" : "areaTotal",
"value" : "101.9",
"label" : "Total area (municipality)"
}, {
"key" : "areaUrban",
"value" : "803",
"label" : "Total area (urban)"
}, {
"key" : "populationDensity",
"value" : "15991",
"label" : "Population desnsity"
}
]
}
다른 개체 같은
{
"key" : "areaUrban",
"value" : "123",
"label" : "a new label"
}
에 의해 키 "areaUrban"와 예를 배열 요소에 대한 대체하는 깨끗한 방법이 지금은 거기에 내가 할 :
은 다음 문서를 고려 두 가지 업데이트 작업에서 먼저 삭제 한 다음 추가 :
UpdateOperations<T> ops = createUpdateOperations().removeAll("myArray ", new BasicDBObject("key", "areaUrban"));
update(createQuery().field("_id").equal(myObjId),ops);
UpdateOperations<T> ops2 = createUpdateOperations().add("myArray ", myReplacementObject);
update(createQuery().field("_id").equal(myObjId),ops2);
어느 것이 잘 작동 하나만 하나의 업데이트 op (morphia 또는 일반 mongo java 드라이버 중 하나)에서 할 수 있습니까?
또한 일치하는 개체가 원래 배열에 없으면 myReplacementObject 개체를 배열에 추가해야합니다.
upsert의 업데이트 부분에서 작동하지만 존재하지 않는 경우 새 요소를 만들지 않습니다. – JohnnyHK
음, 좋은 지적이야. 그 주위에 방법이없는 것 같습니다. 하나의 쿼리에서 끌어 오기/밀어 넣기를 수행하는 것도 허용되지 않습니다. 위치 연산자에 upserts를 추가 할 수있는 티켓이 있습니다. https://jira.mongodb.org/browse/SERVER-3326 –
감사합니다. 희망 그들은 그들이 곧이 기능을 추가 :). – azpublic