агрегация в nodejs, приводящая к вложенности json, могу ли я получить ее без вложенности, взяв только один _id данных из всех коллекций - PullRequest
1 голос
/ 28 апреля 2020

агрегация в nodejs, что приводит к вложенности json, могу ли я получить ее без вложенности, взяв только один _id данных из всех коллекций. Есть ли возможность получить данные без вложенного json Я пытался агрегировать в nodejs с помощью приведенного ниже кода. Я получил вывод, как указано в выходной сессии ниже. Но я хотел бы получить вывод как ожидаемый вывод, так как я не могу использовать зацикливание при зацикливании

Student.aggregate([
  {
    $match: { name: 'abcd'}
  },
  {
    $lookup:{
       from:'teachers',
       pipeline: [
        { 
          $match: { name: 'pqrs' } 
        },
        {
          $project:{
            "_id":1
          }
        }
       ],
       as: "teacherLookup"
    }
  },
  {
    $lookup:
     {
       from:'subjects',
       pipeline: [
        { 
          $match: { name: 'computer' } 
        },
        {
          $project:{
            "_id":1
          }
        }
 ],
       as: "subjectLookup"
     }
  }
])


output
[
  {
    _id: '52301c7878965455d2a4',
    teacherLookup: [ '5ea737412589688930' ],
    subjectLookup: [ '5ea745821369999917' ]
  }
]
I am expecting the output as (without nested json)
[
  {
    studentId: '5ea1c7878965455d2a4',
    teacherId: '5ea737412589688930' ,
    subjectId:  '5ea745821369999917' 
  }
]

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете использовать $arrayElemAt, чтобы получить первый элемент из массива.

Student.aggregate([
  {
    $match: { name: "abcd" },
  },
  {
    $lookup: {
      from: "teachers",
      pipeline: [
        {
          $match: { name: "pqrs" },
        },
        {
          $project: {
            _id: 1,
          },
        },
      ],
      as: "teacherId",
    },
  },
  {
    $lookup: {
      from: "subjects",
      pipeline: [
        {
          $match: { name: "computer" },
        },
        {
          $project: {
            _id: 1,
          },
        },
      ],
      as: "subjectId",
    },
  },
  {
    $project: {
      teacherId: { $arrayElemAt: ["$teacherId", 0] },
      subjectId: { $arrayElemAt: ["subjectId", 0] },
    },
  }
]);
...