{LISTID:1, EMAIL:1} に一意のインデックスを持つコレクション サブスクライバーがあります。ドキュメントが存在しない場合は挿入し、既に存在する場合は更新したいのですが、挿入されているか更新されているかは関係なく、ドキュメントの _id を取得したいのです。
$mongo = new Mongo();
$db = $mongo->test;
$collection = $db->subscribers;
$criteria = array('LISTID' => 86, 'EMAIL' => 'opp20071980@gmail.com');
$data = array('LISTID' => 86, 'EMAIL' => 'opp20071980@gmail.com', 'FNAME' => 'Oleg');
$result = $collection->update($criteria, $data, array('fsync' => true, 'upsert' => true));
var_dump($data);
var_dump($result);
ドキュメントが挿入された場合、結果は次のようになります。
array
'LISTID' => int 86
'EMAIL' => string 'opp20071980@gmail.com' (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 'opp20071980@gmail.com' (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 を取得する方法を教えてください。