Динамическое создание конвейера MongoDB в Голанге

# #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. Ух ты! Это было быстро и просто. Большое спасибо, Бурак. Это сделало свое дело. Очень признателен.