Aliane -
First - Yes, you can have MongoDB act like a message broker. I even did a presentation on what is needed (and a little on what a broker does) at the MongoDB DC 2013. You can find the slides
here and the example code
here.
The idea of using messaging within a system is to allow the components/applications/processes within the system be decoupled and scaled independently. The broker acts as the central point that all of the components connect and communicate through.
If you use a queue then one part of the process slows down or has a spike in requests it is the job of the message broker to absorb (accept) and hold the requests until the component processing the requests can catch up. Using publish-subscribe (aka: topic, fanout exchange) then the sending process can notify multiple other processes without having to know about all of the components that want to know about the message. There are other, more advanced, patterns such as dynamic scaling[1], but I would avoid doing those until you are comfortable with the basic topic and queue semantics. Note that while the message broker is the "central" point that does not mean it is a single point. Brokers like RabbitMQ have very good clustering capabilities.
Why would you use MongoDB (or Redis) as a message broker? I think the only reasonable answer to that is when the use of a messaging pattern is very limited within the application. If that is the case the cost of having another piece of infrastructure that you have to install, understand, monitor, repair, and upgrade is higher that the cost of writing and maintaining code to force your datastore into a role it was not really designed to support. If messaging is going to be a central part of your application then the scale tips (quickly) in the other direction and I would use a purpose built application like RabbitMQ (which I have used and like).
HTH -
Rob.
1: A process watches the pending messages on queues and starts/stops processes as demand increases/decreases.