Подтвердить что ты не робот

Получить только первый объект из Mongo Cursor

Я делаю запрос к MongoDB, и мне нужен только первый объект. Я знаю, что могу использовать findOne, но я все еще смущен, когда я ошибаюсь.

Это не работает:

if ($cursor->count() > 0) {
    $image = $cursor->current();
    // neither does this work
    // $image = $cursor[0]; 
    return $image;
} else {
    return false;
}   

//echo $image->filename;
// Throws error: Trying to access property of non-object image

Это работает, хотя:

if ($cursor->count() > 0) {
    $image = null;
    foreach($cursor as $obj)
        $image = $obj;
    return $image;
} else {
    return false;
}   
4b9b3361

Ответ 1

Как насчет этого:

if ($cursor->count() > 0) {
    $cursor->next();
    $image = $cursor->current();
    return $image;
} else {
    return false;
}

Бонус: цитата из страница Doc

общедоступный массив MongoCursor:: current (void)
Это возвращает NULL до Вызывается MongoCursor:: next().

Ответ 2

Решение, предоставляемое raina77ow, использует Mongo библиотеку, которая отмечена как наследие.

В настоящий момент существует только один способ получить первый элемент из курсора - используйте метод MongoDB\Driver\Cursor:: toArray:

$cursor = $collection->find();
$firstDocument = $cursor->toArray()[0];