使用cakephp2.3和mongoDB如何在文档中添加数组?

时间:2013-06-13 20:08:29

标签: mongodb cakephp-2.3

如何使用mongoDB中的列表?

例如,我有一个文档(类),以及此类中的学生列表,即子文档(学生)。   你不是要在课堂上增加更多的学生。

模型中的

public function salvar($name,$idClass){

 $new = array(     
   "_id" => $idClass,
   "student"=>  array(
                        'idStudent' => new MongoId(),
                        'name' => $name));

  return $this->save($new);
    }

但是当你添加一个新学生时,他并没有这样做。

2 个答案:

答案 0 :(得分:1)

问题的答案是:

public function salvar($name,$size,$id){

    $this->mongoNoSetOperator = '$push';

    // fixed array data structure
    $susp = array( 
        "_id" => $id,
        "images"=> array(
            array(
                'id' => new MongoId(),
                'name' => $name,
                'size' => $size
            )
        )
     );

    return $this->save($susp);
}

注意:通过明确客观的答案,感谢Github的Garamon。

答案 1 :(得分:1)

如何执行$ push update

您提供的答案阐明了您一直在尝试做的事情。但是,解决方案有点复杂。要使用MongoDB执行$push更新,只需指定您要执行推送更新:

$this->Foo->save(array( 
    '_id' => $id,
    '$push' => array(
        "images" => array(
            'id' => new MongoId(),
            'name' => $name,
            'size' => $size
        )
     )
);

可以使用mongoNoSetOperator属性来实现同样的目的,但

  1. 这是间接的,因此不是很明显
  2. 如果多次调用保存在同一个请求中,如果修改后它未重置为$set,则可能会造成混淆
  3. 它可以防止在一次通话中使用多个运算符。
  4. 有关在the documentation中使用不同更新运算符的更多信息。