Использование projection-парсера MongoDB (mongoose, NodeJS)
Добрый вечер.
Есть некая функция findUsers(ids, projection, callback){...}
Функция принимает список айдишников юзеров, поля, которые нужно выбрать и, соответственно, колбэк.
Функция сперва выполняет поиск указанных юзеров в Redis (юзеры хранятся в сериализованном виде в строковых ключах). Если таковых там нет, то добирает недостающих из монги, после чего их кэширует, чтобы при последующем таком же запросе, соответственно, уже все эти юзеры брались из кэша. При обращении в монгу за недостающими юзерами, мы берем документ полностью (не используем projection переданный вторым аргументом), т.к. юзера нам нужно будет положить в кэш.
Таким образом, функция склеивает данные из редиса и монги (+кэширует). Загвоздка в том, что перед передачей результата в колбэк, мне нужно их отфильтровать и вернуть только те поля, которые были запрошены (через projection, второй аргумент функции).
Можно ли как-то воспользоваться нативным парсером, который используется внутри методов .find, findOne? Т.е. скормить ему мой склеенный результирующий объект и projection и чтобы он это все отфильтровал. Мне нужно, чтобы корректно обрабатывались проекции вида {wishes.$.title: 1}.
Можно ли обойтись без своих велосипедов?
Насколько я понимаю, драйвер под MongoDB всего лишь строит запросы. Вся логика лежит на плечах самой MongoDB. Заместо городить велосипед используй pick() из Underscora/Lo-Dash'а.