In this question, Jeff the Bear explained how to search documents with an array
contains 'tag1'
contains ['tag1','tag2'],
contains any of ['tag3', 'tag4']
But how should I do if I want to search documents with an array which is part of another array?
post1.tags = ['tag1']
post2.tags = ['tag1','tag3']
post3.tags = ['tag2','tag4']
post4.tags = ['tag1','tag2','tag3','tag4']
I want to get post1 and post3 because they have tags
contained in ['tag1', 'tag2', 'tag4']
I don't want to get post2 and post4, because tag3 doesn't exist in ['tag1', 'tag2', 'tag4']
In other words, select posts that all elements in its tags array can be found in another conditional array
db.col.find({tags:[tag1,tag2]})
but it requires a good order – Sammaye Mar 26 '13 at 11:20db.col.find({tags: {$in:[tag1,tag2]}})
should work – Sammaye Mar 26 '13 at 11:33db.col.find({tags: {$in:[tag1,tag2]}})
will search any posts with tags contain "tag1" or "tag2". I may get some posts with tags["tag1","tag3"]
or["tag2","tag4"]
, and they aren't the posts I'm looking for. In this case, I only want posts with tags["tag1"],["tag2"],or ["tag1","tag2"] – Orion Chang Mar 26 '13 at 11:45