【问题标题】:$slice implemented in the php driver?$slice 在 php 驱动程序中实现?
【发布时间】: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 正在将其作为普通文档读取,因为它不理解您放入的运算符

标签: php mongodb push slice


【解决方案1】:

您正在运行 MongoDB pre 2.4。

MongoDB 2.4 引入了$slice,之前的$push 运算符不支持$each 运算符。

当 MongoDB 遇到像这样的无法识别的运算符(即在 MongoDB 2.2 中)用于 $push 时,它会认为它实际上是您要使用的键,并像对待任何其他数据一样对待它。

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 2017-05-04
    • 1970-01-01
    • 2016-12-23
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多