2013-08-25 2 views
1

Я попытался обновить документ в gridfs Mongodb с идентификатором документа. Первоначально мой документ был:Не удалось обновить gridfs Mongodb с помощью php

{ 
    [_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 
} 

И я хотел обновить значение только поля «Username». Я использовал следующий код, чтобы обновить его:

$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 и т.д.

Заранее спасибо за вашу поддержку!

Vasudev

ответ

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']))); вернуть $obj непосредственно вместо cursor. Если вы это сделаете, просто убедитесь, что $obj не null (документа не найдено), прежде чем пытаться обновить файл.

$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); 
} 
Смежные вопросы