Upsert関数を使用して、生成されたIDを取得できます。私はすでに作成している構造体と「バー」:
db := service.ConnectDb()
sessionCopy := db.Copy()
defer sessionCopy.Close() // clean up
collection := sessionCopy.DB(service.MongoDB.DTB).C(MessageCol.tbl)
log.Println("before to write: ", msg)
// Update record inserts and creates an ID if wasn't set (Returns created record with new Id)
info, err := collection.Upsert(nil, msg)
if err != nil {
log.Println("Error write message upsert collection: ", err)
return MessageMgo{}, err
}
if info.UpsertedId != nil {
msg.Id = info.UpsertedId.(bson.ObjectId)
}
// gets room from mongo
room, err := GetRoom(msg.Rid)
if err != nil {
return msg, err
}
// increments the msgcount and update it
room.MsgCount = room.MsgCount + 1
err = UpdateRoom(room)
if err != nil {
return msg, err
}
return msg, err
これは私が持っているサンプルコードであり、正常に動作します.....
は、どのように私は「foo」を置き換えることができますか? – Acidic
"アプリケーションが再起動した場合、オブジェクトIDジェネレータは最初から同じIDを繰り返し生成し、データベース内の既存のレコードを更新します。これは2番目の回答に掲載されており、本当に重要であり、答えに言及されていません。私はあなたが将来この情報を人に追加する答えを編集すべきだと思います。 – cjf93
@ cjf93これは当てはまりません。 bson.ObjectIdの実装を見ると、現在の時刻が考慮されます。これはここでも説明しています:https://github.com/go-mgo/mgo/issues/392 –