2

特定のドキュメントを変更する場合 (正確な構造が不明な場合)、現在のコレクションに保存する前に、別のコレクションにこのドキュメントのバックアップを作成したいと考えています。バックアップを行うために、私はこれを試しました:

$mongoDbObj = $collection->findOne($filter);
...
$collectionBackup->insert($mongoDbObj,true);

...しかし、MongoIDがコピーされるため、これは一度しか機能しません。同じドキュメントを再度バックアップしようとすると、MongoID が backupCollection に既に存在します。だから私の質問は:

元のドキュメントの MongoID を変更せずに、別のコレクションに挿入する前に、MongoID を新しい MongoID で上書きして、PHP で MongoDB ドキュメントをコピーできますか?


この簡単な質問は次のとおりです。これを行うにはどうすればよいですか。

$mongoDbObj = $collection->findOne($filter);
...
$collectionBackup->insert($mongoDbObj,true);
// change MongoId so the next line doesn't throw exception
$collectionBackup->insert($mongoDbObj,true);
// save my object back with the original MongoID
$collection->save($mongoDbObj);

また、MongoDBドキュメントをクローン/コピーする方法も役立ちます。コピーしたドキュメントに新しいMongoIDを貼り付けるだけで、問題を簡単に回避できます。

4

2 に答える 2

1
$mongoDbObj = $collection->findOne($filter);
$mongoDbObjBak = array();

foreach($mongoDbObj as $key => $value) {
    if($key != '_id') {
        $mongoDbObjBak[$key] = $value;
    }
}

$collectionBackup->insert($mongoDbObjBak,true);
$collection->save($mongoDbObj);
于 2013-04-11T15:22:55.157 に答える