Я бы добавил несколько вещей из того, что знаю. Пожалуйста, обновите это, если есть какие-либо улучшения:
1) Хорошо, подумайте об этом так, если у вас нет указанного фильтра и нет индексов - тогда запрос будет перебирать все документы в коллекции, искать в массиве tags
значения, переданные во входном массиве, и извлекать эти значения, если они существуют в tags
. В каждом массиве документов tags
необходимо искать значения.
2) Если у вас есть фильтр - даже тогда, когда у вас не включены индексы, запрос должен сканировать все документы в коллекция, которая является collection scan
, и затем она будет проходить через отфильтрованные документы (сопоставленные документы из предоставленного фильтра) и обновлять массив tags
.
Зачем нам нужны индексы в коллекции и фильтры в запросе?
Прежде всего, почему вы хотели бы сделать это без применения индексов? Каждая коллекция должна быть должным образом проиндексирована.
Итерация по индексным ключам (значениям индексированного поля) в памяти и извлечение фактических документов с диска, их обновление и запись обратно будут быстрыми с использованием индексов, с другой стороны, имея фильтры позволят выполнить запрос через меньшее количество документов или индексных ключей (если они проиндексированы) для обработки любых обновлений или в случае агрегирования для любых преобразований документа на последующих этапах.