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

140

Теперь я использую 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']

Как я могу выполнять эти поиски

  • содержит 'tag1'
  • содержит ['tag1', 'tag2'],
  • содержит любой из ['tag3', 'tag4']
Теги:

2 ответа

228
Лучший ответ

Попробуйте следующее:

db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3
  • 6
    Это хорошо описано в справке: mongodb.org/display/DOCS/…
  • 2
    для $ all это означает все элементы И в выраженном порядке или это просто неупорядочено?
Показать ещё 6 комментариев
5

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

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

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

  • 1
    Кстати, только что проверил это в списке проиндексированных ключевых слов. Абсолютно тот же результат с $ и и $ все
  • 0
    Возможно это изменилось с более новыми версиями тем временем.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню