2013-04-25 3 views
0

Вопрос в том, можно ли использовать «$ slice» с помощью update() и $ push в mongodb.

Я уже пробовал это: (с и без приведения к (объекта)

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

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

Но единственное, что происходит в Монго добавляя весь второй массив в обновлении() к сборнику Так я получаю

.
thumbs: [ { "$each" : ... 

заранее спасибо!

+0

Почему вы выбрали параметр update как объект? – 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 сталкивается с непризнанными операторами вроде этого (то есть в MongoDB 2.2) для $ push, он будет полагать, что это на самом деле ключи, которые вы хотите использовать, и обрабатывать их, как и любые другие данные.

Смежные вопросы