Java 経由で挿入されたドキュメントの Mongo 生成 ID を取得する最良の方法は何ですか。
ドキュメントを挿入する Java プロセスはマルチスレッドです。つまり、オブジェクトの ID を挿入して返すアトミックな方法が必要です。
また、一意のインデックスを設定した場合、オブジェクトが重複している場合、ID は返されますか?
ありがとう!
Java 経由で挿入されたドキュメントの Mongo 生成 ID を取得する最良の方法は何ですか。
ドキュメントを挿入する Java プロセスはマルチスレッドです。つまり、オブジェクトの ID を挿入して返すアトミックな方法が必要です。
また、一意のインデックスを設定した場合、オブジェクトが重複している場合、ID は返されますか?
ありがとう!
ObjectId を早期に生成し、それを挿入で使用すると、データベースから返される必要はありません。ObjectId は共有シーケンス番号を一意にするために使用しないため、挿入する前に生成するか、後で取得するかは問題ではありません。
public ObjectId createThing() {
ObjectId result = new ObjectId();
BasicDBObject thingToInsert = new BasicDbObject();
thingToInsert.put('_id', result);
//set other fields here
collection.insert(thingToInsert);
return result;
}
Mongoによって生成されるネイティブObjectIdはグローバルに一意であり、マルチスレッドアプリケーションから安全に使用できます。
生成されたObjectIdは、_idキーの下のDbObjectから取得できます。
挿入されたドキュメントが一意のインデックス制約に違反している場合-WriteConcernの値によっては、Javaドライバーが例外をスローする場合があります。
http://api.mongodb.org/java/current/com/mongodb/WriteConcern.html
値が大きい場合、NORMAL-例外がスローされます。
WriteConcernは、個々の挿入(または更新)メソッドごとに指定することも、DBCollection.setWriteConcernを使用してグローバルに指定することもできます。
_id を使用してドキュメントを取得しますが、モバイルなどの Java クラスにデータを取得するときに、ObjectID タイプの _id 属性を変更して、mongodb でドキュメントの値を設定します。