문제

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 } ] }
.

기본적으로 배열이 아닌 문서에 푸시하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top