28

ドキュメント( http://godoc.org/launchpad.net/mgo/v2 )によると、Upsertメソッドを使用すると、「Upserted」ドキュメントのIDを取得できます。

この機能を提供しないInsertメソッドもあります。
何故ですか?アップサートの代わりに挿入を実行したい場合はどうなりますか?(または、それを実行したい正当な理由はありませんか?私は疑問に思い始めています。)

4

3 に答える 3

48

を使用しますbsonNewObjectId()挿入する ID を生成します。

これは、新しいドキュメントを挿入する方法です。

i := bson.NewObjectId()
c.Insert(bson.M{"_id": i, "foo": "bar"})

を発行するときに挿入するか更新するかがわからないため、Upsert(更新が発生した場合に備えて) クエリの直後に ID をドロップするためだけに ID を生成する必要はありません。そのため、データベース側で生成され、該当する場合に返されます。

于 2012-08-17T19:35:03.837 に答える
3

アプリケーション自体から ObjectId を生成した場合、アプリケーションが再起動されると、Object Id ジェネレーターが最初から開始され、同じ ID を何度も何度も生成するため、これはまったく発生しないはずです。 、データベース内の既存のレコードを更新します。

それは間違っています。MGO は、MongoDB にバインドする他の言語が Python や Java で行うように、これらの ID を生成してオブジェクトを更新するか、挿入されたオブジェクトの objectId をすぐに返す際にデータベースに依存する必要があります。

于 2016-08-27T16:54:15.280 に答える