Mongo에서 배열을 업데이트하는 중 오류가 발생했습니다
문제
Mongo 문서에 배열을 만들었으므로 다음과 같이 보입니다.
{ "_id" : ObjectId("4f59e19d0b7aab2903000004"),
"details" : { x:1, y:2 }
}
.
나는 그 다음에 새로운 가치를 배열로 밀어려고 노력하고 있습니다 :
db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{$push: {"details": {"z":3}}});
.
그러나 오류가 발생합니다 :
Cannot apply $push/$pushAll modifier to non-array
.
실제로 배열에 정보를 추가 할 수있는 유일한 방법은 DOT 표기법을 사용하여 e.g.
db.users.update({"_id" : ObjectId("4f59e19d0b7aab2903000004")},{"details.z": 3});
.
가 작동하는 것처럼 보이지만 약 30 개의 가치가있는 배열이있을 때 조금 지루해 보입니다.
선명도를 위해, 나는 리튬 PHP 프레임 워크를 사용하고 있으며, 수동으로 들어가는 것뿐만 아니라 '세부 정보'를 준비하기 위해 배열을 반복 할 수 있습니다.각 키에 이르지만 나는 그것이 필요하다고 생각하지 않는다.왜 가치를 배열로 푸시하지 않는 이유에 대해 누락 된 것이 있습니까?
(리튬 코드는 다음과 같습니다.)
User::update(array('$push'=>array('details'=>array('z'=>3))), array('_id'=>$id))
.
감사합니다
Dan
해결책
"세부 사항"은 배열이 아닌 임베디드 문서입니다.배열이면 이렇게 보일 것입니다 (배열을 나타내는 []을 참고) :
{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"),
"details" : [ { "x" : 1 }, { "y" : 2 } ] }
.
$ push를 수행하십시오 :
db.users.update({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")},
{$push : {"details": {"z":3}}})
.
예상 결과를 얻습니다 :
db.users.find({"_id" : ObjectId("4f59f0531ae8f3b5f92246fe")})
{ "_id" : ObjectId("4f59f0531ae8f3b5f92246fe"),
"details" : [ { "x" : 1 }, { "y" : 2 }, { "z" : 3 } ] }
.
기본적으로 배열이 아닌 문서에 푸시하려고합니다.
제휴하지 않습니다 StackOverflow