0

如何使用 mongoDB 中的列表?

例如,我有一个文档(班级),以及这个班级的学生列表,即一个子文档(学生)。你没有什么,就是给一个班级增加更多的学生。

在模型中:

public function salvar($name,$idClass){

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

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

但是当你添加一个新学生时,他并没有那样工作。

4

2 回答 2

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,提供清晰客观的答案。

于 2013-06-14T13:09:01.190 回答
1

如何执行 $push 更新

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

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

可以使用该mongoNoSetOperator属性来实现相同的目的,但是

  1. 它是间接的,因此不明显
  2. 多次调用 save 在同一个请求中,如果它没有被重置,$set如果它被修改,它可能会令人困惑
  3. 它可以防止在一次调用中使用多个运算符。

在文档中有更多关于使用不同更新操作符的信息

于 2013-06-17T08:27:44.550 回答