$ setEquals со списком списков - PullRequest
0 голосов
/ 25 августа 2018

Оператор агрегации $ setEquals позволяет сравнивать два списка как множества на равенство.

Допустим, у меня есть список списков, подобный этому:

lol = [['a', 'b'], ['c']]

И структура документа, подобная этой, в моей базе данных:

{
    "_id": "8...",
    "letters": [ 'b', 'a']
}

На этапе сопоставления агрегации я хотел бы получить все документы, где набор «букв» равен любой изнаборы lol.

В этом случае пример документа будет возвращен, поскольку набор ['b', 'a'] равен набору ['a', 'b'].

Кто-нибудь знает, как этого добиться?

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 августа 2018

Насколько мне известно, для этого нет единого оператора. Однако вы можете либо использовать $or для проверки каждого из них и создать этот набор условий программно, либо вы можете добавить этапы конвейера к вашей агрегации, чтобы: 1. добавить массив массивов в качестве поля для каждого документа, 2. $unwind массив, и, наконец, 3. сравните отдельные элементы неокрашенного массива (т.е. каждый отдельный набор) с вашим полем letters.

Какой бы подход вы ни выбрали, он будет во многом зависеть от ваших ограничений памяти. Если у вас не хватает памяти, я настоятельно рекомендую второй вариант дополнительных этапов конвейера, в противном случае вы можете рассмотреть вопрос о вставке программно сконструированной операции $or в существующий этап конвейера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...