如何在猫鼬中获得多个结果并将其合并为一个响应

时间:2020-05-16 18:05:13

标签: javascript node.js mongodb express mongoose

在API(路由)调用中,我希望有3个猫鼬查询,然后将结果合并以形成响应json。

查询

student
  .countDocuments
  (
    {}
  )
  .then(stundentNumber => {
    return stundentNumber
  })

teacher
  .countDocuments
  (
    {}
  )
  .then(teacherNumber => {
    return teacherNumber;
  })

staff
  .countDocuments
  (
    {}
  )
  .then(staffNumber => {
    return staffNumber;
  });

所需的响应

res.json({
    teacher: teacherNumber,
    student: stundentNumber,
    staff: staffNumber
});

如何使用nodejs / mongoose完成

2 个答案:

答案 0 :(得分:3)

如果您使用的是async-await,请尝试如下操作,其中Promise.all()将帮助您并行执行所有操作:

async function getCounts() {
    let [student,teacher,staff] = await Promise.all([student.countDocuments({}),teacher.countDocuments({}),staff.countDocuments({})]);
    return {student,teacher,staff};
}

/** call this function in main handler function where you get API call */
getCounts().then((data)=>{res.json(data)}).catch((err)=>{console.log(err)})

答案 1 :(得分:0)

您必须建立学生,教师和员工模型

const mongoose = require("mongoose"),
{Schema} = mongoose,
  studentSchema = new Schema(
    {
      name: {
        first: {
          type: String,
          trim: true
        },
        last: {
          type: String,
          trim: true
        }
      },
      studentNumber: {
        type: Number,
        required: true,
        lowercase: true,
        unique: true
      },
    }

其他两个模型相同。 之后,您必须编写函数查询。详细了解queries