如果将 amap
作为文档传递给Collection.InsertOne()
,mongo
包将使用 将mongo.TransformDocument()
其转换为*bson.Document
值,因为大多数操作仅在bson.Document
s 上实现。
当前的转换实现既不处理objectid.ObjectID
也不处理time.Time
类型。它可以并且可能应该,我认为它会,但目前它没有。
如果您希望这些类型在 MongoDB 中以正确的类型结束,您可以*bson.Document
自己构造并传递一个,您可以在其中明确指定属性的类型应该是什么。
这是与您的等效插入语句,bson.NewDocument()
用于手动创建文档:
res, err := coll.InsertOne(context.Background(), bson.NewDocument(
bson.EC.String("string", "test"),
bson.EC.Int64("integer", 123),
bson.EC.Double("float", 0.123),
bson.EC.ArrayFromElements("array",
bson.VC.String("t"), bson.VC.String("e"),
bson.VC.String("s"), bson.VC.String("t")),
bson.EC.ObjectID("objectid", objectid.New()),
bson.EC.DateTime("time", time.Now().UnixNano()/1e6), // Must pass milliseconds
))
它更冗长,但它在我们希望 MongoDB 中的结果文档是明确的。结果文档将如下所示:
{
"_id" : ObjectId("5ac5f598ca151255c6fc0ffb"),
"string" : "test",
"integer" : NumberLong(123),
"float" : 0.123,
"array" : [
"t",
"e",
"s",
"t"
],
"objectid" : ObjectId("5ac5f598ca151255c6fc0ffa"),
"time" : ISODate("2018-04-05T10:08:24.148Z")
}
一旦驱动程序改进,我假设您的原始版本将按预期工作并生成与此结构相同的文档。