2012-06-21 35 views
11

Tôi đang tạo truy vấn cho MongoDB và tôi chỉ muốn đối tượng đầu tiên. Tôi biết tôi có thể sử dụng findOne, nhưng tôi vẫn còn nhầm lẫn nơi tôi đang đi sai.Chỉ lấy đối tượng đầu tiên từ Con trỏ Mongo

này không hoạt động:

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 

này hoạt động mặc dù:

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

Trả lời

14

Làm thế nào về điều này:

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

Bonus: trích dẫn từ the Doc page

mảng công cộng MongoCursor :: current (void)
Điều này trả về NULL cho đến MongoCursor :: next() được gọi.

+0

Vâng, đó là hoạt động. Wow ... đó là một phần ngớ ngẩn. Sẽ chấp nhận càng sớm càng tốt. – xbonez

+0

Đó là ok, tôi đã rất ngạc nhiên bởi điều này cách đây không quá lâu.) – raina77ow

0

Giải pháp do raina77ow cung cấp sử dụng thư viện Mongo được đánh dấu là di sản.

Tại thời điểm này chỉ có một cách để có được yếu tố đầu tiên từ con trỏ - sử dụng phương pháp MongoDB\Driver\Cursor::toArray:

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

Gọi đến phương thức không xác định MongoCursor :: toArray() – theBugger

Các vấn đề liên quan