2013-08-25 1 views
0

У меня есть два свойства b и u, которые являются массивами. Я хочу, чтобы мой запрос возвращал мне все документы, которые имеют по крайней мере 1 элемент в b, который удовлетворяет условию 1 или по крайней мере 1 элементу в u, удовлетворяющему условию 2.Mongodb, как я могу агрегировать совпадение/группировать некоторые документы, но только если выполняются те или иные условия?

Моя проблема заключается в том, что если условие 1 выполнено, оно будет верните мне массив b со всеми элементами, которые его удовлетворяют, И ВСЕ элементы из u. То же самое с условием B.

Я хочу: если есть элемент в b, удовлетворяющий условию 1, верните мне этот массив с элементами, которые его удовлетворяют. Если нет, пустой массив или исключить b. То же самое с условием 2 и u.

Если ни один элемент не удовлетворяет условиям, исключите документ.

ответ

2

К сожалению, вы не можете сделать это с помощью MongoDB за один шаг на сервере базы данных. Вам нужно будет сделать это на стороне клиента.

Хотя вы можете проектировать (documentation) свои результаты, чтобы включать/исключать только некоторые поля (или первый результат сопоставления в массиве, например, как показано на рисунке here), вы не можете условно сделать это на основе поиска с несколькими массивами (и оператор проектирования возвращает только первое совпадение, а не только результаты, которые соответствуют).

Возможно, вам потребуется рассмотреть другую структуру документов/коллекций для удовлетворения ваших требований. У MongoDB еще нет фильтрации/поиска уровня поддокумента.

+0

боялся этого. я должен буду сделать какую-то «ожидающую» коллекцию с большим количеством операций записи и чтения. проводной – Discipol