Как написать агрегационный запрос для mongodb с использованием узла - PullRequest
0 голосов
/ 26 мая 2020

Я хотел бы написать запрос для получения данных из mongodb, у меня есть три коллекции - книги, учителя, ученики. В коллекции книг есть bookName и_id, в коллекции учителей --_ id, teacherName и TeacherId, в коллекции учеников _id , studentName, teacherId…. У меня есть studentName как S1 и teacherName как T1 со мной, как я могу получить запись студента с именем S1, у которой также есть teacherId как имя T1 (из коллекции учителей) из коллекции студентов ... eg. select _id from student where studentName =S1 and teacherId=(select techerID from techer where teacherName = T1)… how can I write this query in node using agregation

books.aggregate([
  {
    '$match': {
      'name': 'book1'     }
  }, {

    '$lookup': {

{    from :students,
    '$match': {

      'name': 'Annie'     }
  },
      'from': 'teachers', // collection name of the teachers
      'localField': 'teacherId',
      'foreignField': '_id', 
      'as': 'teachers'
    }
  }, {
    '$match': {
      'teachers': {
        '$elemMatch': {
          'teacherName': 'Jones'
        }
      }
    }
  }
])`

1 Ответ

0 голосов
/ 26 мая 2020

Насколько я понял, вы хотите получить записи об учениках, используя имя ученика и имя учителя.

при условии, что каждый ученик имеет только один учитель.

`students.aggregate([
  {
    '$match': {
      'name': 'Anne' // collection name of the students
    }
  }, {
    '$lookup': {
      'from': 'teachers', // collection name of the teachers
      'localField': 'teacherId',
      'foreignField': '_id', 
      'as': 'teachers'
    }
  }, {
    '$match': {
      'teachers': {
        '$elemMatch': {
          'teacherName': 'Jones'
        }
      }
    }
  }
])`
...