Как проверить, содержит ли поле массива уникальное значение или другой массив в MongoDB?

теперь я использую mongodb.

У меня есть коллекция blogpost, и blogpost имеет теги, которые являются массивом, например

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']

Как я могу сделать эти ищу

  1. содержится 'вкладка 1'
  2. содержит ['tag1', 'tag2'],
  3. содержит любой из ['tag3', 'tag4']

2 ответов


попробуйте это:

db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3

мой опыт заключается в том, что для (2) следующее решение намного быстрее, чем с "$all":

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });

но, честно говоря, я не знаю, почему. Мне было бы интересно, если кто знает.