0

mongo に接続し、この構造でドキュメントを更新するために、 codeigniter-mongodb-library/tree/v2で Codeigniterを使用しようとしています。

{
"_id" : ObjectId("50fd8bd460e958aa38000002"),
"created_at" : 1358793684,
"updated_at" : 1358793684,
"is_active" : 0,
"memberships" : [
    {
    }
],
"first_models" : [
    [ ]
],
"second_models" : [
    [ ]
],
"pages" : [
    [ ]
]
}

私が望むのは、指定された _id によってドキュメントを更新することだけです。特に、「first_models」配列内に要素を追加する必要があります。私の Codeigniter モデルから、私はこれを呼び出しています:

$result = $this->mongo_db
->push(array('_id' => '50fd8bd460e958aa38000002'),array('first_models' => array('Some text here'))) 
->update($this->collections['sites']); 

特定のドキュメントを更新しようとすると、次のエラーが発生します。

Mod on _id not allowed

指定された_idと競合しているようです...何かが欠けていて、何がわかりません:( Mongodb 2.2.2をCodeigniter 2.1.3、PHP5.4、およびApache2で使用しています。

4

1 に答える 1

1

私はそれで間違った方向に進んでいました。最後に、@Rajanは正しい解決策を教えてくれます:

$updated = $this->mongo_db->where('_id', new MongoId($id))
->set($data)
->update('mycollection');

set代わりpushに を使用し、オブジェクト ID をnew MongoId($id):-)で参照していることがわかります。

于 2013-01-23T14:08:01.193 に答える