2015-02-25 3 views
1

Я пытался извлечь отдельные теги из массива для автоматического заполнения модуля. Формат коллекции:MongoDB distinct- возвращает только согласованные элементы массива

{ 
    tags:["apple","mango","apple-pie"] 
}, 
{ 
    tags: ["man","lemon","lemon-lite"] 
} 

Теперь, я заинтересован в получении различных тегов с префиксом q.

Запрос, который я вызвал это:

db.portfolio.distinct("tags",{"tags":/app/}); 

Однако этот запрос возвращается весь массив: ["apple","mango","apple-pie"].

Мое требование: ["apple", "apple-pie"].

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

+0

вам удалось найти решение проблемы, которую вы столкнулись? –

+0

Ваше решение сработало для меня. Спасибо. –

+0

Удивительный. Рад, что это тебе помогло! –

ответ

2

Вы можете сделать это с помощью aggregation.

  1. Вы $unwindtags массив.
  2. You $match те теги, которые вы ищете в соответствии с указанным регулярным выражением.
  3. Вы установили $group теги в набор, используя $addToSet.

код выглядит примерно так:

> db.portfolio.aggregate([ 
    { "$unwind": "$tags" }, 
    { "$match": { "tags": /app/ }}, 
    { "$group": 
     { 
      "_id": null, 
      "tags": { "$addToSet": "$tags" } 
     } 
    } 
]); 
{ "_id" : null, "tags" : [ "apple-pie", "apple" ] } 
0

Невозможно, если запрос будет возвращен документам, содержащим соответствующие теги (/ app /), которые означают, что будут не соответствующие теги. различный получает отличный набор из всех этих тегов. Итак, вам придется снова фильтровать возвращаемый массив (с использованием regex/app /)

Смежные вопросы