RethinkDB is a mind blown piece of software.
It mimics or behaves like traditional relational databases, but it stores JSON documents much like CouchDB or MongoDB do.
It has tables you can join with other tables. You can run queries and even subqueries against tables and joined tables. But tables are just lists of JSON documents collected/selected by an index. Ever coded a getAll() function? You don't need to anymore in RethinkDB.
Joining JSON documents is already crazy, and RethinkDB has another crazy concept named 'changefeeds'. You can subscribe to changes for anything you want. Be it a table, be it a particular JSON document or a query. You can think of it as an SQL trigger stored for insert/update/delete at the same time. Your client receives a change event you can process. You can find about which row in a table has changed or which value in a JSON document was updated. That applies to query results too. We can officially stop telling our users to press continuously F5/CTRL+R to receive new data. Or programmatically use timers for asking the storage back-end if something has changed. We know it instantaneously (depending on network quality and speed).
The next crazy feature is streaming. Instead of waiting for the complete result to be computed and send over to your clients, you can stream data. Instant feedback on client-side.
RethinkDB has its own query language called ReQL. It's a DSL for certain programming languages and in case of JavaScript, it's just chained function calls.
RethinkDB is similar but different to MongoDB+Redis (or CouchDB+Redis or Couchbase). RethinkDB is also similar but different to Firebase.
Unfortunately, it isn't an all-rounder unable to solve all existing and future problems. But it deals relatively quickly with complex topics that are causing pain with the current tech stack.