Внедрение Mongoose-подобного населения для Monger: соображения производительности
Я программирую веб-бэкэнд в Clojure поверх базы данных MongoDB с Monger в качестве драйвера.
Мне действительно нравится Monger, но мне не хватает функциональности, которая показалась мне весьма полезной в драйвере Mongoose: populate
метод, который позволил мне эмулировать элементарные объединения в моих запросах.
Это пошло примерно так:
MyModel.find()
.populate("myExternalKey")// put the name of the key to populate; Mongoose knows in which collection to look, because you have registered this property as a Ref
.exec();
Итак, первый вопрос: есть ли что-то подобное для Монгера или Clojure?
Я не нашел ничего, так что, предположив, что ответ - нет, вот что я планирую сделать.
Я думаю о создании служебной функции Clojure под названием my-populate
со следующим использованием:
(my-populate mydoc
{:key1 "aCollectionName"
:key2 {:key3 "anotherCollectionName"
:key4 "yetAnotherCollName"}})
куда mydoc
карта, представляющая документ MongoDB с внешними ссылками на другие коллекции по путям (:key1)
, (:key2 :key3)
а также (:key2 :key4)
и звонит my-populate
возвращает заполненный документ (ну, скорее всего, core.async
канал, содержащий его, чтобы сказать правду).
Моя стратегия состоит в том, чтобы просто сделать один запрос на поле, что не сложно сделать, но теперь я занимаюсь вопросами производительности.
Должен ли я беспокоиться о проблемах производительности этой стратегии? Есть ли какая-нибудь расширенная функциональность MongoDB, которая поможет с этим?
Может быть, тот, кто знает, что такое мангуст populate
за кулисами может дать мне некоторое представление.