Tokyo Cabinet
Another thing to do is just use a decent filesystem like btrfs or (dare I say it?) reiserfs and just store each document in its own file and have the filename be the key. Then the directory is the 'single file' you're looking for.
Of course, both of those are key -> value based. You can use 'grep' or something like it to turn either into a document based approach. You could also use something like 'Protocol Buffers' for your documents. That would allow a very efficient, language independent means of storing your data. Of course, you'd then have to write your own code for querying your documents.