I am using mongodb now.
I have a blogpost collection, and it has a tags field which is an array, e.g.
tags
blogpost1.tags = [\'tag1\', \'tag2\'
My experience is that for (2) the following solution is much faster than the one with "$all":
db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });
but to be honest, I do not not why. I would be interested in, if anyone knows.