【问题标题】:I can't populate data using MongoDB and Node我无法使用 MongoDB 和 Node 填充数据
【发布时间】:2021-08-17 01:36:52
【问题描述】:

这是我拥有的两个模型。

user.js

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  email: {
    type: String,
  },
  passwordHashed: {
    type: String,
  },
  role: {
    type: String,
  },
  student: [{ type: mongoose.Schema.Types.ObjectId, ref: "Student" }],
});

const Users = mongoose.model("User", userSchema);

module.exports = Users;

student.js

const mongoose = require("mongoose");

const studentSchema = new mongoose.Schema({
  email: {
    type: String,
  },
  role: {
    type: String,
  },
});

const Students = mongoose.model("Student", studentSchema);

module.exports = Students;

我的问题是我想将数据填充到 user.js 但是当我运行这段代码时:

const user = await Users.find().populate('student')
console.log(user)

它只是返回一个学生的空数组。我该如何解决这个问题?提前谢谢你。

【问题讨论】:

    标签: node.js mongodb populate


    【解决方案1】:

    对于任何类型的填充/加入,我一直使用 mongodb $lookup。
    它比使用人口更强大、灵活和约定俗成。
    根据您的 userSchema,很可能您已将学生文档的 _id 存储在 userSchema 的学生数组中。
    如果我是正确的,那么您可以按照以下方式进行操作:

    await Users.aggregate([
      {
        "$lookup": {
          "from": "students",
          "localField": "student",
          "foreignField": "_id",
          "as": "studentList"
        }
      }
    ])
    

    虽然你的userSchema的学生字段是objectId,那么你不需要做任何事情,否则你必须将你的localField转换为mongoose.Types.ObjectId(student)

    这里是一个例子:https://mongoplayground.net/p/fuw9Drld9M-

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2017-05-05
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2020-11-20
      • 2018-05-18
      相关资源
      最近更新 更多