I've used both Redis pub-sub and Mongodb tailable cursors on the ops log (which is a capped collection - see http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html and http://blog.mongodb.org/post/29495793738/pubsub-with-mongodb) to whip up my own. The primary difference is whether you want to build out your own logic for pub-sub using Mongo. On the face of it, pub-sub seems simple enough, but as with anything, its got a lot of edge cases that you have to program to. Redis' pub-sub has already done most of the plumbing work for you so you can worry about the high level coding problems and leave the low level stuff to systems that have already solved the problem.
The big win with Mongo over Redis, is that you can have more control over how you build out your pub-sub, so if you have special needs, it may be a better choice. For example, with Redis (out of the box), if a client disconnects and then reconnects 10 minutes later, it will have lost the messages in those intervening minutes and there is no way to get them back. With Mongo, the client can go back and get those messages (with the caveat that it has to read the entire capped collection from start to finish) - remember that you will have to track the last message delivered to each client, etc. There are work arounds for Redis so that it can achieve this - see Redis Pub/Sub with Reliability as one example.
If you are in need of speed and supporting a very large number of clients and a large number of subscription channels, Redis is the way to go. Of the implementations I mentioned, Redis was by far the fastest with the ability to handle the largest number of clients. Of course, this probably reflects problems with our Pub-Sub implementation and is not a reflection on mongo's general performance. Although, we did experience issues with the global write lock in Mongo that has been mitigated in the latest version (2.2?).
To wrap up, if you need something specialized, Mongo may be the right choice for you. However, if you want straight forward messaging that works out of the box for a large load, I would not try to reinvent the wheel and would go with Redis.