2 回答
TA贡献1796条经验 获得超10个赞
uint8
是 的别名byte
,并且[]byte
是一种特殊类型,它的处理方式与其他切片类型不同(不是数字切片)。[]byte
值使用编码bsoncodec.ByteSliceCodec
,其他切片值使用编码bsoncodec.SliceCodec
。
使用任何其他数字类型的切片,例如[]int8
或[]int
:
filter := bson.M{"type": bson.M{"$in": []int{1, 2, 3}}}
注意:mongo 驱动程序有自己的 BSON 实现和包,请使用:go.mongodb.org/mongo-driver/bson
. 在您的示例中,您正在导入和使用gopkg.in/mgo.v2/bson
它是一个完全不同的 BSON 实现,作为mgo
驱动程序的一部分开发(现在不受支持且已过时)。不要混合不同的驱动程序。
TA贡献1982条经验 获得超2个赞
您应该删除 to 的转换i,uint8并像这样获取数据正确的代码。
// mock some data
collection := client.Database("testing").Collection("numbers")
for i := 0; i < 10; i++ {
_, err = collection.InsertOne(ctx, bson.M{"type": i, "value": i})
if err != nil {
fmt.Println(err)
return
}
}
res := collection.FindOne(ctx, bson.M{
"type": bson.M{
"$in": []int{1, 2, 3},
},
})
if res.Err()!=nil{
// handle error
}
然后您可以获取原始数据或解码为另一种类型,例如:
res.DecodeBytes()
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报