diff --git a/mongo/collection.go b/mongo/collection.go index 223e6ebd91137fa7a9b98ab1782f96668c73b651..99e3b711ae3b7481d88082e922a6baaa12c4a46d 100644 --- a/mongo/collection.go +++ b/mongo/collection.go @@ -240,9 +240,11 @@ func (col *Collection) Append(item interface{}) (interface{}, error) { } // And other interfaces? - if setter, ok := item.(ObjectIdIDSetter); ok { - if err := setter.SetID(id); err != nil { - return nil, err + if _, ok := id.(bson.ObjectId); ok { + if setter, ok := item.(ObjectIdIDSetter); ok { + if err := setter.SetID(id.(bson.ObjectId)); err != nil { + return nil, err + } } } @@ -260,7 +262,7 @@ func (col *Collection) Exists() bool { } // Fetches object _id or generates a new one if object doesn't have one or the one it has is invalid -func getID(item interface{}) bson.ObjectId { +func getID(item interface{}) interface{} { v := reflect.ValueOf(item) switch v.Kind() { @@ -312,6 +314,8 @@ func getID(item interface{}) bson.ObjectId { if bsonID.Valid() { return bsonID } + } else { + return v.FieldByName(fieldName).Interface() } } } diff --git a/mongo/database.go b/mongo/database.go index 705f727eafd847eceeabfd61c8f11fb50aae800f..7a0a0acca746f7f1630e87fb80139ec4f5657fa1 100644 --- a/mongo/database.go +++ b/mongo/database.go @@ -249,6 +249,11 @@ func (s *Source) versionAtLeast(version ...int) bool { s.version = buildInfo.VersionArray } + // Check major version first + if s.version[0] > version[0] { + return true + } + for i := range version { if i == len(s.version) { return false