Из-за чего возникает ошибка fatal error: concurrent map writes?
Эта ошибка возникает потому что вы из двух горутин одновременно пишете в одну мапу. Так нельзя, ибо map не потокобезопасен. Конкурентный доступ к ней надо защищать мьютексом.
Или можете использовать sync.Map, который появился в go 1.9, там это сделали за вас.
bson.M это map, это ссылочный тип. Когда вы передаете map аргументом в функцию вы передаете ссылку на участок памяти. Соответственно при конкурентном доступе к этому участку и возникает ошибка. Вам следует либо защитить этот участок примитивами синхронизации вроде sync.Mutex либо передавать в функцию не map, а копию. Например (в коде из вашего комментария)func SiteController(w http.ResponseWriter, r *http.Request) {
    bsonQuery := bson.M{}
    if node.Params.ExtendFilter != nil { //node.Params.ExtendFilter глобальная переменная
    //следует не просто взять ссылку на нее
    //bsonQuery = node.Params.ExtendFilter
    //а сделать копию для безопасного конкурентного использования
        for key, value := range  node.Params.ExtendFilter{
              bsonQuery[key] = value
        }
    }
    ....
   doc, err := documents.GetDocumentFrontend(bsonQuery, true)
}