См. Исходный код, https://github.com/mongodb/mongo-go-driver/blob/master/bson/primitive/primitive.go
bson.D
, внутренне - primitive.D
, что []primitive.E
, что struct
. bson.M
, внутренне - primitive.M
, что map[string]interface{}
. Вы вводите ключ / значение в bson.M
, но используете документ (структуру) в bson.D
.
Лучше объяснить это, используя 2 параметра, например поиск a = 1 and b = 2
. Ваш синтаксис будет: bson.M{"a": 1, "b": 2}
или bson.D{{"a": 1}, {"b": 2}}