猿问

如何使用 mongo-go-driver 0.2.0 在 bson.A 中使用切片的元素

如何使用给定的切片生成 bson.A?我需要这个来进行动态查询。


我正在从 mongo-go-driver alpha 升级到 beta 0.2.0,这已经成为我项目中的一个重大变化,因为 API 现在不同了。


https://godoc.org/github.com/mongodb/mongo-go-driver/bson


input := []string{"bar", "world"}

//expected output

bson.A{"bar", "world"}


慕后森
浏览 162回答 3
3回答

牧羊人nacy

不确定你是否找到了答案,但我昨天为此奋斗了一个多小时。我不肯定这会解决你的问题。我假设您正在尝试根据您的输入构建一个过滤器。最终我在尝试传递数组时没有使用 bson.A。情况:试图构建一个过滤器,其中一个 bson.D 元素是一个数组。我以为我需要使用 bson.A。我的初步假设:return bson.D{  {"uuid", request.Uuid},  {"action", request.Action},  {"resource", bson.D{{"$in", bson.A{resourceStrings}}}},}哪里resourceStrings是一段字符串。然而,这最终将构建一个看起来像 FILTER :  [ {resource [{$in [[Orgs::Organizations::1 Orgs::Organizations::* Orgs::Organizations Orgs::*]]}]}]*注意 $in 方法在这里寻找一个数组的数组。我们想要的是: FILTER :  [{uuid 80} {action UpdateOrganization} {resource [{$in [Orgs::Organizations::1 Orgs::Organizations::* Orgs::Organizations Orgs::*]}]}]如果我们传入字符串的文字数组,它将起作用......return bson.D{  {"uuid", request.Uuid},  {"action", request.Action},  {"resource", bson.D{{"$in", bson.A{"Orgs::Organizations::1", "Orgs::Organizations::*", "Orgs::Organizations", "Orgs::*"}}}},}经过反复试验,我发现 bson.D 会直接接受数组。最终我解决了这个问题return bson.D{  {"uuid", request.Uuid},  {"action", request.Action},  {"resource", bson.D{{"$in", resourceStrings}}},}从字面上看你的例子 - 如果你只是想将一个数组编组到一个 bson.A 尝试:bson.A{input}

鸿蒙传说

所以 bson.A 底层类型是[]interface{},我可以append像一片一样使用它

jeck猫

这是我的代码,用于根据存在于另一个集合中的 ID 删除多个文档。我们首先从一个集合中收集所有 ID 并添加到一个切片中。然后我们使用删除另一个集合中的文档DeleteMany()我正在展示相关代码以保持代码整洁。杰森[    {        "id": "602607bcfdc0548bfebbd0c7",        "subject": "SUBJECT",        "system": "SYSTEM",        "board": "BOARD",        "series": "SERIES",        "paper": "PAPER",        "year": "2021",        "month": "February",        "question_hex_ids": [            "602607bcfdc0548bfebbd0c4",            "602607bcfdc0548bfebbd0c5",            "602607bcfdc0548bfebbd0c6"        ]    }]代码    var hexIDCollection []primitive.ObjectID    database := db.Conn.Database("mydatabase")    question := database.Collection("questions")    //Iterating to collect IDs from paper    for k, _ := range mystruct.question_hex_ids {        // fetching all IDs and appending to slice        ids := mystruct.question_hex_ids[k]        hexID, err := primitive.ObjectIDFromHex(ids)        if err != nil {            fmt.Println("ObjectIDFromHex ERROR", err)        }        //Populating a slice of all the IDs        hexIDCollection = append(hexIDCollection, hexID)    }    filter := bson.D{        {"_id", bson.D{{"$in", hexIDCollection}}}, }    deleteResult, err1 := question.DeleteMany(ctx, filter)    if err != nil {        fmt.Println("Question Deletion Error", err1)    }    fmt.Println("All questions Deleted: ", deleteResult)
随时随地看视频慕课网APP

相关分类

Go
我要回答