I've recently been helping a friend through the process of learning node.js to find a new job.
When it is time to teach him a NoSQL database, I have trouble recommending he learn anything other than MongoDB. The absolutely one and only reason would be that all of the jobs I have seen available in my recent stint on the market, have been for MongoDB.
Now, I do have my favorite toolchain, which I'll add into a comment to avoid this getting sidetracked too much. It's also not really relevant. Suffice to say, my current toolset works pretty well for the kind of thing I need it for, but mostly ... I just haven't ever seen the reason to learn MongoDB.
The only reason that seems to come up is that everybody uses MongoDB because it's popular. Tautology aside, I don't really have any idea of what it's sweet spot is.
What kind of data structures, access and write patterns, and volume of data is the situation where you would choose mongo over any of the other NoSQL db's (including things like redis).
I'd love to get some real feedback on this so I know what to tell my friend. Also, I would prefer if people didn't just point to things written by mongodb.com, because that feels like yet another tautology.
I mean, generally the first thing I would have to do if I had a datastore is write a REST layer on top of it. With CouchDB, that's just done already. I love that I can just use streams to pipe things around to and from the database. On the simpler apps, I basically just end up writing a small node proxy server that passes HTTP requests to the server, and optionally filter/sanitizes the data on it's way through.
I absolutely adore the _changes feed, which allows me to open a socket to it and handle events from the db in "real-time". And the replication is just so simple and powerful too.
Now I'll admit that it's views have some real deep problems, but I hardly ever use them except for the simplest of simple things. Mostly when I have any kind of somewhat complex query i need to do, I add elasticsearch with the couchdb river. This listens to the _changes feed and indexes the data. So I query against the ES instance and PUT/GET against the couchdb.
I really love those tools, they are so simple and powerful, and hardly give me any real trouble (well, nowadays).
Other than being forced to for a job, I can't see why I would use mongo instead of couchdb for anything. But really, this question is mostly about what I should tell my friend.