As you’ve seen in the previous two chapters, you can store and retrieve documents very quickly with key-based operations and perform some pretty complex queries and aggregations with views. However, even with these two mechanisms, you are limited to finding known keys and searching in predefined indexes within a single bucket. You can’t perform ad hoc queries programmatically, nor can you search across multiple buckets. This is where N1QL comes to the rescue! N1QL (pronounced “nickel”) is a new query language with a familiar, SQL-like syntax. When we wrote the first version of this book, it was only offered as a developer preview, but now Couchbase 4.0 is finally out, so we can talk about the real deal.