2013-04-25 1 views
0

제 질문은 mongodb에서 update()와 $ push와 함께 '$ slice'를 사용할 수 있는지입니다.

나는 이미 시도 : (로와 (객체)

$db->collection->update(
    array('_id' => new MongoId($id)), 

    (object)array('$push' => 
      array('thumbs' => array(
       '$each' => $items, 
       '$slice' => -5 
)))); 

그러나 몽고가 컬렉션에 업데이트()에서 전체 두 번째 배열을 추가하는 일이 유일한 캐스트하지 않고 그래서

를 얻을. 사전에
thumbs: [ { "$each" : ... 

감사합니다!

+0

왜 업데이트 매개 변수를 Object로 형 변환하고 있습니까? – Sammaye

+0

php가 컬렉션의 객체와 배열을 구분할 수 없기 때문에. [] = 객체 및 {} = 배열. 그러나 그것을 캐스팅하지 않아도 작동하지 않습니다. – Zanders

+0

PHP 드라이버는 중요하지 않습니다. dicts와 배열은 (당신이 말한 것처럼) 유사하며 PHP 드라이버는 관계없이 올바른 표기법으로 인코딩 할 수 있습니다. MongoDB 버전은 무엇입니까? '$ slice' 연산자는 매우 새롭기 때문에 (v2.4.3), MongoDB는 여러분이 입력 한 연산자를 이해하지 못하기 때문에 이것을 정상적인 문서로 읽습니다. – Sammaye

답변

0

당신은 MongoDB를 2.4 사전 실행하고 있습니다.

MongoDB 2.4가 $slice을 소개했으며 이전에는 $push 연산자가 $each 연산자를 지원하지 않았습니다.

MongoDB가 $ push에 대해 이와 같이 인식 할 수없는 연산자 (예 : MongoDB 2.2)를 발견하면 실제로 사용하려는 키이고 다른 데이터처럼 취급한다고 믿을 것입니다.

관련 문제