1

ドキュメントの 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などのバイナリファイルを更新するコードは何ですか?

ご支援いただきありがとうございます。

ヴァスデフ

4

1 に答える 1

0

あなたはこれから先に進んだと思いますが、他の誰かがそれを求めている場合に備えて、ここに答えがあります.

これにより、他のすべての値をそのままにして、ファイルに関係する特定のメタデータを更新できます。

$m = new MongoClient();
$db = $m->mydb;
$gridfs = $db->getGridFS();
$cursor = $gridfs->find(array('_id'=>new MongoID($_POST['_id'])));
foreach ($cursor as $obj) {
    $obj->file['Username'] = $_POST['name'];
    $gridfs->save($obj->file);
}

ここにがあるので、 の代わりに を直接返すために_id使用することもできます。これを行う場合は、ファイルを更新する前に、そうでない(ドキュメントが見つからない) ことを必ずテストしてください。$gridfs->findOne(array('_id' => new MongoID($_POST['_id'])));$objcursor$objnull

$m = new MongoClient();
$db = $m->mydb;
$gridfs = $db->getGridFS();
$obj = $gridfs->findOne(array('_id'=>new MongoID($_POST['_id'])));
if ($obj) {
    $obj->file['Username'] = $_POST['name'];
    $gridfs->save($obj->file);
}
于 2014-02-21T07:09:33.577 に答える