Có - Có thể sử dụng một truy vấn duy nhất.
MongoDB bao gồm một findAndModify
lệnh có thể sửa đổi nguyên tử một tài liệu và trả lại nó (theo mặc định, nó thực sự trả về tài liệu trước khi nó được sửa đổi).
Trình điều khiển PHP không bao gồm một phương thức thuận tiện cho việc này trên lớp thu thập (chưa - hãy kiểm tra lỗi này), nhưng nó vẫn có thể được sử dụng (lưu ý rằng PHP của tôi rất tệ, vì vậy rất có thể tôi đã mắc lỗi cú pháp trong đoạn mã sau):
$key = array( 'something' => 'unique' );
$data = array( '$inc' => array( 'someint' => 1 ) );
$result = $mongodb->db->command( array(
'findAndModify' => 'collection',
'query' => $key,
'update' => $data,
'new' => true, # To get back the document after the upsert
'upsert' => true,
'fields' => array( '_id' => 1 ) # Only return _id field
) );
$id = $result['value']['_id'];