У меня есть документ с массивом пар uid и ролей, как в этой схеме.
TestSchema = new mongoose.Schema({
users: {
type: [
{
uid: { type: String },
role: { type: Number }
}
]
}
});
Для схемы я хочу указать виртуальный атрибут owner
, который заполняется документом издругая коллекция.Я хочу заполнить его документом, который имеет тот же uid, что и uid элемента массива от users
до role: 1
(всегда есть один элемент массива с role: 1
).Установка localField
для самого виртуального атрибута и попытка вычислить его с помощью функции получения атрибутов, подобной этой
XSchema.virtual("owner", {
ref: "User",
localField: "owner", // ???
foreignField: "uid",
justOne: true
}).get(function() {
return this.user.find(user => {
return user.role ===1;
});
});
, а затем просто вызов
X.find().populate("owner");
не работает, потому чтоФункция геттера не применяется перед населением.Как использовать вычисленное значение из документа в качестве значения localField
здесь?Какие еще варианты у меня есть, кроме нескольких запросов?