web-dev-qa-db-ja.com

Mongodb phpは新しいドキュメントのIDを取得しますか?

ドキュメントを作成する:

$db->collection->insert($content);
// $newDocID = ???

新しいドキュメントのIDを取得しようとしています。どうやって?ありがとう。

35
Mark

ドキュメント によると、insertに渡す配列は_idフィールドで修正されます。

$db->collection->insert($content);
$newDocID = $content['_id'];
62
Theo

_id before insertを取得することもできます。新しいMongoIdを含むドキュメントに_idフィールドを追加するだけです。

$content['_id'] = new MongoId();
$db->collection->insert($content);

また、これには素晴らしい利点があります。

  1. 前の回答でZagNutがコメントで投稿したようなfsyncフラグは必要ありません。したがって、DBからの応答を待つ必要はありません。
  2. IDを取得するために実際にDBに何かを挿入する必要はありません。したがって、いくつかの関連オブジェクトを準備してから、挿入するかしないかそれらを作成できます-mongoがサポートしていないトランザクションに似ています(まだ?)。
  3. 実際にはcan dbではなくアプリケーションでidを生成するので、挿入の前後に好きなことができます。
34
user133408

これは私にとってはうまくいきます:

$insertResult = $collection->insertOne($object);
$id = $insertResult->getInsertedId();
17
the_root
 $newDocument = $db->collection->findAndModify ( $row, $row, null, array('new'=>true,'upsert' => true));
 $strId = $newDocument['_id']->{'$id'};

http://php.net/manual/en/mongocollection.findandmodify.php

1
BbopLifa