# #arrays #mongodb #go #mongodb-query
#массивы #mongodb #Вперед #mongodb-запрос
Вопрос:
Все, я использую драйвер MongoDB/Golang и имею следующий код Golang для построения конвейера. Я успешно протестировал это, и это работает:
. . matchStage := bson.D{ {"$match",bson.D{ {"$or", bson.A{ bson.D{{"featureA","string123"}}, bson.D{{"featureA","string456"}}, bson.D{{"featureA","string789"}}, bson.D{{"featureA","string012"}}, }}, }}, } filterCursor, err := collection.Aggregate(ctx, mongo.Pipeline{matchStage}) . .
Мой вопрос в том, если предположить, что я получу свой bson.Значения D в качестве входных данных среза, как мне динамически построить этот запрос?? В частности, я заранее знаю ключ «featureA» и получаю кусочек:
features := []string{"string123", "string456", "string"789", "string012"}
Я знаю, что это должно быть относительно просто, но я уже несколько часов ломаю голову над этим, просматривая фрагмент, сортировку/отмену маршалинга json и т. Д.
Ответ №1:
Вы можете сделать это:
featureExpr:=bson.A{} for _,f:=range features { featureExpr=append(featureExpr,bson.D{{"featureA",f}}) } matchStage := bson.D{ {"$match",bson.D{{"$or", featureExpr}}, }
Комментарии:
1. Ух ты! Это было быстро и просто. Большое спасибо, Бурак. Это сделало свое дело. Очень признателен.