牧羊人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}
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)