나는 다음과 같은 기록했다 : 기록은 두 개의 하위 문서를 가지고
db.p.save(r);
을 :
r = {
"_children" : {
"addressesR" : [
{
"street" : "Bitton",
"city" : "Perth",
"id" : ObjectId("5317c149f45dfdb114deec41")
},
{
"id" : ObjectId("5317c149f45dfdb114deec42"),
"street" : "Ivermey",
"city" : "Perth",
],
},
"_searchData" : {
"addressesR" : [
{
"street" : "BITTON",
"city" : "PERTH",
"id" : ObjectId("5317c149f45dfdb114deec41")
},
{
"id" : ObjectId("5317c149f45dfdb114deec42"),
"street" : "IVERMEY",
"city" : "PERTH",
}
],
},
}
그냥 저장 한 아이의리스트를 가지고 있으며, 다른 하나는의 동일한 목록이 있습니다 아이들이지만 대문자로 (검색 목적으로).
업데이트 할 때 둘 다 업데이트 할 수 있어야합니다. 이제 작동합니다 :
db.p.update({ '$and': [
{ '_searchData.addressesR.street': 'BITTON' } ] },
{ '$set': {
'_searchData.addressesR.$.street':'BITTON CHANGED' ,
'_children.addressesR.$.street': 'Bitton CHANGED'
}
})
$
연산자는 위치 연산자입니다. 따라서 위치가 일치하면 제대로 작동합니다. 그러나 어떤 이유로 든 지위가 일치하지 않으면 재난으로 향하고 있다고 생각합니다.
이제는 항상 $ 두 개의 배열을 동시에 밀어 넣을 수 있으며, 같은 mongoDb 쿼리 내에서 동시에 $ I를 가져 오는 것이 좋습니다.
또한 데이터베이스에 복제가 진행되는 환경에서이 작업이 수행됩니까 (위치는 항상 항상 동일합니다)?
(참고 :이 하나 개의 레코드 내에서 어린이 레코드를 취득하는 자동 메커니즘의 최종 결과입니다.)
배열의 서브 세트와 일치시키기 위해 각각'$ elemMatch'를 사용하는 두 가지 다른 업데이트를 실행해야한다고 생각합니다. 아마 배열이 동기식으로 위치를 벗어나지 않는다고 가정하는 것보다 안전 할 수도 있습니다 ? – Merc
종류는 방법입니다. 나는 그것에 대한 메모와 미래의 고려 사항을 응답으로 줄 수 있습니다. –