2013-04-25 85 views
0

我的問題是,如果可以使用'$ slice'與mongodb中的update()和$ push。

我已經嘗試過這樣的:(有和沒有鑄造(對象)

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

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

但是,出現這種情況是蒙戈將在更新()來收集整個第二陣列的唯一的事情,所以我得到

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

提前感謝!

+0

爲什麼你將更新參數轉換爲對象? – Sammaye 2013-04-26 07:10:19

+0

因爲php無法區分集合中的對象和數組。 [] =對象和{} =數組。但即使我不施放它,它也不起作用。 – Zanders 2013-04-30 14:44:24

+0

這對PHP驅動程序無關緊要,字典和數組是類似的(正如你所陳述的那樣),PHP驅動程序可以編碼爲正確的符號。你在做什麼MongoDB版本? '$ slice'運算符是非常新的(v2.4.3),所以看起來這是發生了什麼,MongoDB正在將它作爲普通文檔讀取,因爲它不理解已經放入的運算符 – Sammaye 2013-04-30 14:58:21

回答

0

您正在運行的MongoDB預2.4。

MongoDB 2.4引入了$slice,以前的$push運營商不支持$each運營商。

當MongoDB中遇到無法識別的運營商像這樣(即MongoDB中2.2)爲$推動它會認爲它實際上是要使用,並把它像任何其他數據的密鑰。