At its most basic form NoSQL is really no more than a way of storing objects using some sort of key/value pairing system. You use this all the time already I assume. For instance. in javascript you can create an object named foo and then do foo['myobj'] = myobj; to store stuff in the object.

All NoSQL servers really do is give you a way to add/delete/query massive arrays and still allow for persistence and fault tolerance. You can create a NoSQL in memory server in about 100 lines of code.

So let's do it this way...in CouchDB you use map/reduce...so let's create a map function do to the same as a bit of SQL code:

SELECT * FROM users WHERE age > 10

In CouchDB you provide the server with a JavaScript function that gets run against every item in the database...

function (doc)
{
    if (doc.objType == "users") {
       if (doc.age > 10) {
           emit(doc._id, null)
       }
    }
}

That's all there really is to it.....it gets way more complex from there on the server end, as the server has to handle crashes, and multiple revisions of the same object, but this is just an example.