ドキュメントの ID を使用して Mongodb gridfs のドキュメントを更新しようとしました。当初、私のドキュメントは次のとおりでした:
{
[_id] => MongoId Object (
[$id] => 5218a723db8af6920a3c6624
)
[Username] => 'Old Name'
[Phone] => 'xxxxxxxxxx'
[Address] => 'User address'
[Email] => 'User email'
[DecMak] => 'Some text'
[Descr] => 'my description'
[ImgName] => 'Image Name'
[Str] => 6
[Date] => '25-08-2013'
[filename] => 'MyJpg.JPG'
[uploadDate] => MongoDate Object (
[sec] => 1377305640
[usec] => 262000
)
[length] => 1099792
[chunkSize] => 262144
[md5] => 2e3bc10f7deeb0334ea0af4bd0fe9bdf
}
そして、「ユーザー名」フィールドのみの値を更新したかったのです。次のコードを使用して更新しました:
$m = new MongoClient();
$db = $m->mydb;
$gridfs = $db->getGridFS();
$collection = $db->fs->files;
$cursor = $collection->find(array('_id'=>new MongoID($_POST['_id'])));
foreach ($cursor as $obj)
{
$db->fs->files->update(array('_id'=>new MongoID($_POST['_id'])),
//identified the document with the ID.
array('Username' => $_POST['name']));
//Original name be changed to what filled in the webform.
}
しかし、更新後、私のドキュメントに加えられたのは次のとおりです。
{
[_id] => MongoId Object (
[$id] => 5218a723db8af6920a3c6624
),
[Username] => 'New Name',
}
そのため、他のすべてのキーとその値が消えました - 私のコードで何が問題になったのですか? ドキュメントを更新するときに、すべてのキーと値のペアについて言及する必要がありますか? 私はそれがすべきではないことを願っています..
さらに、画像/mp3などのバイナリファイルを更新するコードは何ですか?
ご支援いただきありがとうございます。
ヴァスデフ