Это было невозможно, но улучшения от Mongo v3.4 мы можем приблизиться к нему.
Вы можете сделать это с помощью mongo-join-query
. Ваш код будет выглядеть так:
const mongoose = require("mongoose");
const joinQuery = require("mongo-join-query");
joinQuery(
mongoose.models.Foo,
{
find: { "bars.testprop": { $in: [true] } },
populate: ["bars"]
},
(err, res) => (err ? console.log("Error:", err) : console.log("Success:", res.results))
);
За кулисами mongo-join-query
будет использоваться ваша схема Mongoose, чтобы определить, к каким моделям присоединиться, и создаст aggregation pipeline , который будет выполнять соединение и запрос.
Раскрытие: я написал эту библиотеку для решения именно этого прецедента.
С моей точки зрения, все постоянные взаимодействия должны быть в классах, называемых Store / Repository. Если вы хотите изменить базу данных, это повлияет только на классы Store / Repository. Я думаю, что независимость фреймворка от приложения более ценна, чем производительность. Вы можете использовать объекты областей в случае проблем с производительностью, но я думаю, что ситуация в таких ситуациях очень редкая.