如何使用 mongo-go-driver 0.2.0 在 bson.A 中使用切片的元素
How to use the elements of a slice in bson.A using mongo-go-driver 0.2.0
如何使用给定的切片生成 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"}
所以 bson.A 基础类型是 []interface{}
,
我可以像切片一样使用append
它
不确定您是否找到了答案,但我昨天为此奋斗了一个多小时。
我不确定这会解决您的问题。我假设您正在尝试根据您的输入构建一个过滤器。最终我在尝试传递数组时没有使用 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}
这是我的代码,用于根据存在于另一个集合中的 ID 删除多个文档。
我们首先从一个集合中收集所有 ID 并添加到一个切片中。然后我们使用 DeleteMany()
删除另一个集合中的文档
我正在展示相关代码以保持代码整洁。
Json
[
{
"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)
如何使用给定的切片生成 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"}
所以 bson.A 基础类型是 []interface{}
,
我可以像切片一样使用append
它
不确定您是否找到了答案,但我昨天为此奋斗了一个多小时。
我不确定这会解决您的问题。我假设您正在尝试根据您的输入构建一个过滤器。最终我在尝试传递数组时没有使用 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}
这是我的代码,用于根据存在于另一个集合中的 ID 删除多个文档。
我们首先从一个集合中收集所有 ID 并添加到一个切片中。然后我们使用 DeleteMany()
我正在展示相关代码以保持代码整洁。
Json
[
{
"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)