这是golang。 我的问题是通过ID进行集合搜索
我想找到几个带有 ID 数组的集合
这是文件
/*document with name brands*/
{
first_id : "100"
second_id : "200"
name : "adidas",
description: "clothing"
}
{
first_id : "101"
second_id : "202"
name : "ferrari",
description: "auto"
}
这是收藏模型
type Brand struct {
FirstID string `bson:"first_id" json:"first_id"`
SecondID string `bson:"second_id" json:"second_id"`
Name *string `bson:"name" json:"name"`
Description *string `bson:"description" json:"description"`
}
这个函数通过ID执行搜索,这就是问题所在
func searchByID(collection *mongo.Collection) {
ids := [][]string{{"100", "200"}, {"101", "202"}}
filter2 := bson.M{"first_id,second_id": ids} // This is the problem
cursor, err := collection.Find(context.Background(), filter2)
brands := []Brand{}
if err == nil {
for cursor.Next(context.Background()) {
brand := Brand{}
cursor.Decode(&brand)
brands = append(brands, brand)
}
} else {
print(err.Error())
}
print("print the brands")
print(brands) //Result []
}
试试这个
filter2 := map[string]interface{}{
"first_id": map[string]interface{}{"$in": []string{"100", "200"}},
"second_id": map[string]interface{}{"$in": []string{"101", "202"}},}
cursor, err := collection.Find(context.Background(), interface{}(filter2))
使用 $or 来组合条件,其中每个条件与特定的first_id 和 secondary_id 对匹配。
var conditions []bson.M
for _, idPair := range ids {
conditions = append(conditions, bson.M{
"first_id": idPair[0],
"second_id": idPair[1],
})
}
filter := bson.M{"$or": conditions}