Показать сообщение отдельно
  #2068 (permalink)  
Старый 20.12.2016, 20:07
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Вопрос по запросам в 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 запрос?

Спасибо.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием