MongoDB PHP: как мне получить ObjectId с фидом JSON?(пусто) - PullRequest
5 голосов
/ 20 октября 2010

Я сохраняю файл через GridFS и сохраняю идентификатор следующим образом:

$file_id = $gridfs->storeUpload('texture');
$item = array(
    'name'=>$_POST['name'],
    'description'=>$_POST['description'],
    'price'=>$_POST['price'],
    'categories'=>$category_array,
    'tags'=>$tag_array,
    'file'=>$file_id
 );
 $collection->insert($item);

и через терминал и выполняю find () "file" возвращает: ObjectId ("4cbe9afe460890b774110000")

Если я сделаю это, чтобы создать JSON-ленту, чтобы я мог получить информацию для моего приложения, то файл "пусто" ... почему это так:

foreach($cursor as $item){
            $return[$i] = array(
                'name'=>$item['name'],
                'description'=>$item['description'],
                'file'=>$item['file']
            );
            $i++;
        }
        echo json_encode($return);

Для меня странная вещьпочему я могу сделать:

foreach($cursor as $item){
echo $item['file'];
}

и получить его обратно?

О, и вот что возвращает фид:

[{"name":"Tea Stained Paper 1","description":"Grungy paper texture stained with tea and coffee.","file":{}},{"name":"Worn Metal 1","description":"A grooved, worn old metal texture","file":{}}]

Ответы [ 2 ]

5 голосов
/ 20 октября 2010

Не уверен, но, возможно,

echo json_encode($return, JSON_FORCE_OBJECT);

- это то, что вам нужно сделать.

Также может потребоваться преобразовать $item['file'] в utf8

utf8_encode($item['file']);

перед присвоением его массиву $return.

1 голос
/ 20 октября 2010

MongoIds хранят свои значения в невидимом поле. У него нет видимых полей, поэтому преобразовать в JSON нечего, поэтому {}. Если вы хотите, чтобы json_encode делал «правильные» вещи, проголосуйте за http://jira.mongodb.org/browse/PHP-154.

Повторяющий MongoId преобразует его в строку, поэтому он ведет себя по-разному.

...