Вопрос по запросам в Mongoose / MongoDB:
Требуется выбрать все Issue пользователя, которые:
- или были созданы пользователем (issue.authorId === user.id)
- или были назначены на пользователя (issue.assigneeId === user.id)
- или те, в которых пользователь оставлял комментарии (notes.notableId.contains(issue.id))
Есть три схемы (ниже они упрощены)
// Issue
const schema = new mongoose.Schema(
{
id: Number,
authorId: Number,
assigneeId: Number
}
);
schema.virtual('notes', {
ref: 'Note',
localField: 'id',
foreignField: 'noteableId'
});
// Note
const schema = new mongoose.Schema(
{
id: Number,
noteableId: Number,
authorId: Number
}
);
// User
const schema = new mongoose.Schema(
{
id: Number
}
);
И два запроса
let id = 21; // user.id пользователь
let $in = yield Note.find({authorId:id}).distinct('noteableId'); // все id комментариев пользователя
this.response.body = yield Issue.find({
$or: [
{authorId:id},
{assigneeId:id},
{id:{$in}}
]
});
Можно ли это сделать в 1 запрос?
Спасибо.