Получить только первый объект из 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;
}
Ответы
Ответ 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];