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 更新の実行方法

あなたが提供した答えは、あなたがやろうとしてきたことを明確にします。ただし、解決策は少し複雑です。MongoDB で更新を実行する$pushには、プッシュ更新を実行することを指定するだけです。

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

プロパティを使用して同じことを達成できますが、mongoNoSetOperator

  1. 間接的だからわかりにくい
  2. $set同じリクエストで保存するための複数の呼び出しがあると、変更された場合にリセットされないと混乱する可能性があります
  3. 1 回の呼び出しで複数の演算子を使用することを防ぎます。

ドキュメントには、さまざまな更新演算子の使用に関する詳細情報があります。

于 2013-06-17T08:27:44.550 に答える