Я не знаю, что эта строка должна означать:
result[ ] = "$in"
Так как это ошибка времени компиляции.
Но элементы документа запроса (условия) по умолчанию находятся в логическом соединении AND, поэтому это все, что нужно:
func sel(query map[string]string) bson.M {
result := make(bson.M, len(query))
for k, v := range query {
result[k] = v
}
return result
}
Если это дает вам все документы в коллекции, то это означает, что все пары ключ-значение соответствуют всем документам. Поэкспериментируйте с простыми фильтрами, чтобы убедиться, что это работает.
Также обратите внимание, что пакет mgo
также поддерживает широкий спектр карт и структур, а не только bson.M
. Документация Collection.Find()
имеет это сказать о разрешенных типах:
Документ может быть картой или структурным значением, которое можно маршалировать с помощью bson. Карта может быть общей, использующей интерфейс {} для его ключа и / или значений, таких как bson.M, или это может быть карта правильно типизированной. Предоставление nil как документа эквивалентно предоставлению пустого документа, такого как bson.M {}.
Таким образом, вы можете использовать свою карту типа map[string]string
без ее преобразования:
err = c.Find(items).Sort("-createdAt").All(&result)