【发布时间】:2013-04-19 11:12:51
【问题描述】:
我的问题是是否可以在 mongodb 中将 '$slice' 与 update() 和 $push 一起使用。
我已经尝试过这个:(有和没有强制转换为(对象)
$db->collection->update(
array('_id' => new MongoId($id)),
(object)array( '$push' =>
array('thumbs' => array(
'$each' => $items,
'$slice' => -5
))));
但唯一发生的事情是 mongo 将 update() 中的整个第二个数组添加到集合中。所以我得到了
thumbs: [ { "$each" : ...
提前致谢!
【问题讨论】:
-
为什么要将更新参数转换为对象?
-
因为php无法区分集合中的对象和数组。 [] = 对象和 {} = 数组。但即使我不施放它也行不通。
-
这与 PHP 驱动程序无关,字典和数组是类似的(如您所说),无论如何 PHP 驱动程序都可以编码为正确的符号。您使用的是哪个 MongoDB 版本?
$slice运算符是非常新的(v2.4.3),所以看起来这就是正在发生的事情,MongoDB 正在将其作为普通文档读取,因为它不理解您放入的运算符