Прежде всего, формат JSON в вашем примере называется MongoDB Extended JSON .Это важно, так как вам нужно следовать формату расширенная дата JSON .Это либо $date
со строкой ISO-8601, либо $date
с $numberLong
с эпохой Unix.
Другое примечание с Update
, вам нужна операция обновления, т.е. $ set ,Если вы собираетесь заменить документ, используйте Replace
.Хотя замена _id
не совсем имеет смысла, в приведенном ниже примере будет использоваться Replace
, как предполагается из примера.
Приведенный ниже пример документа в базе данных:
db.collection.insert({
"_id": ObjectId("5bf36072a5820f6e28a4736c"),
"Foo":1
})
Альтернативой использованию globalsign/mgo
является использование пакета mongo-go-driver / bson , естьметод UnmarshalExtJSON () , который вы могли бы легко использовать для анализа расширенного JSON.
Используя текущую версию (0.0.18), пример будет:
import (
"github.com/mongodb/mongo-go-driver/bson"
"github.com/mongodb/mongo-go-driver/mongo"
)
replacement := bson.D{}
// Example of response body
data := `{"_id":{"$oid":"5bf36072a5820f6e28a4736c"},"DateModified":{"$date":{"$numberLong":"1542241349721"}},"DateCreated":{"$date":{"$numberLong":"1460091636474"}}}`
err = bson.UnmarshalExtJSON([]byte(data), true, &replacement)
if err != nil {
log.Fatal(err)
}
query := bson.D{{"Foo", 1}}
replaceResult, err := c.ReplaceOne(context.Background(), query, replacement)