12

我正在对 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;
}   
4

2 回答 2

15

这个怎么样:

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

奖励:来自Doc 页面的报价

public array MongoCursor::current (void)
在调用 MongoCursor::next() 之前返回 NULL。

于 2012-06-21T23:01:33.033 回答
0

raina77ow 提供的解决方案使用标记为 legacy 的Mongo库。

目前只有一种方法可以从光标中获取第一个元素 - 使用MongoDB\Driver\Cursor::toArray方法:

$cursor = $collection->find();
$firstDocument = $cursor->toArray()[0];
于 2017-06-07T08:39:30.677 回答