使用 mongodb $in 查询时,如果使用 [] uint8 进行查询,则会出现

大家。当我在 mongodb $in 查询选择器中使用 []uint8 数组时,会出现“(BadValue)$in 需要一个数组”错误。有人可以给我一些帮助吗?谢谢 !!!


这是我的复制步骤:


MongoDB信息

mongodb驱动版本为v1.8.1


$ mongo --host 192.168.64.6

MongoDB shell version v4.0.3

connecting to: mongodb://192.168.64.6:27017/

Implicit session: session { "id" : UUID("e4d7cea2-ab81-45ad-a51e-e7acf45a7242") }

MongoDB server version: 4.4.8

WARNING: shell and server versions do not match


mongos> use testing

switched to db testing

mongos> db.numbers.find()

{ "_id" : ObjectId("61b71d3d73b251bceee62032"), "type" : 0, "value" : 0 }

{ "_id" : ObjectId("61b71d3d73b251bceee62033"), "type" : 1, "value" : 1 }

{ "_id" : ObjectId("61b71d3d73b251bceee62034"), "type" : 2, "value" : 2 }

{ "_id" : ObjectId("61b71d3d73b251bceee62035"), "type" : 3, "value" : 3 }

{ "_id" : ObjectId("61b71d3d73b251bceee62036"), "value" : 4, "type" : 4 }

{ "_id" : ObjectId("61b71d3d73b251bceee62037"), "value" : 5, "type" : 5 }

{ "_id" : ObjectId("61b71d3d73b251bceee62038"), "type" : 6, "value" : 6 }

{ "_id" : ObjectId("61b71d3d73b251bceee62039"), "type" : 7, "value" : 7 }

{ "_id" : ObjectId("61b71d3d73b251bceee6203a"), "type" : 8, "value" : 8 }

{ "_id" : ObjectId("61b71d3d73b251bceee6203b"), "type" : 9, "value" : 9 }



去代码

package main


import (

    "context"

    "fmt"

    "time"


    "go.mongodb.org/mongo-driver/mongo"

    "go.mongodb.org/mongo-driver/mongo/options"

    "go.mongodb.org/mongo-driver/bson"

)


func main() {

    // init mongodb client

    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

    defer cancel()

    client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://192.168.64.6:27017/"))

    if err != nil {

        fmt.Println(err)

        return

    }


    // mock some data

    collection := client.Database("testing").Collection("numbers")

    for i := 0; i < 10; i++ {

        _, err = collection.InsertOne(ctx, bson.M{"type": uint8(i), "value": i})

        if err != nil {

            fmt.Println(err)

            return

        }


回首忆惘然
浏览 130回答 2
2回答

白衣染霜花

uint8是 的别名byte,并且[]byte是一种特殊类型,它的处理方式与其他切片类型不同(不是数字切片)。[]byte值使用编码bsoncodec.ByteSliceCodec,其他切片值使用编码bsoncodec.SliceCodec。使用任何其他数字类型的切片,例如[]int8或[]int:filter&nbsp;:=&nbsp;bson.M{"type":&nbsp;bson.M{"$in":&nbsp;[]int{1,&nbsp;2,&nbsp;3}}}注意:mongo 驱动程序有自己的 BSON 实现和包,请使用:go.mongodb.org/mongo-driver/bson.&nbsp;在您的示例中,您正在导入和使用gopkg.in/mgo.v2/bson它是一个完全不同的 BSON 实现,作为mgo驱动程序的一部分开发(现在不受支持且已过时)。不要混合不同的驱动程序。

临摹微笑

您应该删除 to 的转换i,uint8并像这样获取数据正确的代码。// mock some datacollection := client.Database("testing").Collection("numbers")for i := 0; i < 10; i++ {&nbsp; &nbsp; _, err = collection.InsertOne(ctx, bson.M{"type": i, "value": i})&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(err)&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }}&nbsp;res := collection.FindOne(ctx, bson.M{&nbsp; &nbsp; "type": bson.M{&nbsp; &nbsp; &nbsp; &nbsp; "$in": []int{1, 2, 3},&nbsp; &nbsp; },})if res.Err()!=nil{&nbsp; &nbsp; &nbsp; &nbsp; // handle error}然后您可以获取原始数据或解码为另一种类型,例如:&nbsp;res.DecodeBytes()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go