У меня есть коллекция подписчиков с уникальным индексом {LISTID:1, EMAIL:1}. Я хочу вставить документ, если он не существует, и обновить его, если он уже существует, но в любом случае я хочу получить _id документа, независимо от того, вставлен он или обновлен.
$mongo = new Mongo();
$db = $mongo->test;
$collection = $db->subscribers;
$criteria = array('LISTID' => 86, 'EMAIL' => '[email protected]');
$data = array('LISTID' => 86, 'EMAIL' => '[email protected]', 'FNAME' => 'Oleg');
$result = $collection->update($criteria, $data, array('fsync' => true, 'upsert' => true));
var_dump($data);
var_dump($result);
Если документ вставлен, я получаю результат:
array
'LISTID' => int 86
'EMAIL' => string '[email protected]' (length=21)
'FNAME' => string 'Oleg' (length=4)
array
'updatedExisting' => boolean false
'upserted' =>
object(MongoId)[6]
public '$id' => string '506446e4e0dae94a0bd25d06' (length=24)
'n' => int 1
'connectionId' => int 10
'fsyncFiles' => int 7
'err' => null
'ok' => float 1
Но если он обновлен, я получаю результат без _id:
array
'LISTID' => int 86
'EMAIL' => string '[email protected]' (length=21)
'FNAME' => string 'Oleg' (length=4)
array
'updatedExisting' => boolean true
'n' => int 1
'connectionId' => int 10
'fsyncFiles' => int 7
'err' => null
'ok' => float 1
Подскажите, пожалуйста, как получить _id, даже если запись обновлена, но не вставлена?