为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕后森 2023-06-01 17:13:49
如何使用给定的切片生成 bson.A?我需要这个来进行动态查询。我正在从 mongo-go-driver alpha 升级到 beta 0.2.0,这已经成为我项目中的一个重大变化,因为 API 现在不同了。https://godoc.org/github.com/mongodb/mongo-go-driver/bsoninput := []string{"bar", "world"}//expected outputbson.A{"bar", "world"}
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

不确定你是否找到了答案,但我昨天为此奋斗了一个多小时。


我不肯定这会解决你的问题。我假设您正在尝试根据您的输入构建一个过滤器。最终我在尝试传递数组时没有使用 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}


查看完整回答
反对 回复 2023-06-01
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

所以 bson.A 底层类型是[]interface{}

我可以append像一片一样使用它


查看完整回答
反对 回复 2023-06-01
?
jeck猫

TA贡献1909条经验 获得超7个赞

这是我的代码,用于根据存在于另一个集合中的 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)


查看完整回答
反对 回复 2023-06-01
  • 3 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信