ドキュメント( http://godoc.org/launchpad.net/mgo/v2 )によると、Upsertメソッドを使用すると、「Upserted」ドキュメントのIDを取得できます。
この機能を提供しないInsertメソッドもあります。
何故ですか?アップサートの代わりに挿入を実行したい場合はどうなりますか?(または、それを実行したい正当な理由はありませんか?私は疑問に思い始めています。)
ドキュメント( http://godoc.org/launchpad.net/mgo/v2 )によると、Upsertメソッドを使用すると、「Upserted」ドキュメントのIDを取得できます。
この機能を提供しないInsertメソッドもあります。
何故ですか?アップサートの代わりに挿入を実行したい場合はどうなりますか?(または、それを実行したい正当な理由はありませんか?私は疑問に思い始めています。)
を使用しますbson
。NewObjectId()
挿入する ID を生成します。
これは、新しいドキュメントを挿入する方法です。
i := bson.NewObjectId()
c.Insert(bson.M{"_id": i, "foo": "bar"})
を発行するときに挿入するか更新するかがわからないため、Upsert
(更新が発生した場合に備えて) クエリの直後に ID をドロップするためだけに ID を生成する必要はありません。そのため、データベース側で生成され、該当する場合に返されます。
アプリケーション自体から ObjectId を生成した場合、アプリケーションが再起動されると、Object Id ジェネレーターが最初から開始され、同じ ID を何度も何度も生成するため、これはまったく発生しないはずです。 、データベース内の既存のレコードを更新します。
それは間違っています。MGO は、MongoDB にバインドする他の言語が Python や Java で行うように、これらの ID を生成してオブジェクトを更新するか、挿入されたオブジェクトの objectId をすぐに返す際にデータベースに依存する必要があります。