【问题标题】:Mongoose Populate returning ObjectID instead of contentMongoose Populate 返回 ObjectID 而不是内容
【发布时间】:2021-07-19 21:29:33
【问题描述】:

我正在尝试创建一个项目调度程序应用程序,到目前为止我有 2 个模型,ProjectModel 和 ProjectTaskModel。但是,在尝试填充时,我似乎只获得了任务的 objectID。

ProjectModel.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const projectModel = new Schema({
    title:{type:String,required:[true,"Project Title is required"]},
    desc:{type:String,required:true},
    status:{type:String,required:true},
    tasks:[{type:Schema.Types.ObjectId,ref:'Task'}]
})

module.exports = mongoose.model('Project',projectModel);

ProjectTask.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const projectTaskModel = new Schema({
    title:{type:String,required:[true,"Project Title is required"]},
    desc:{type:String,required:true},
    status:{type:String,required:true}
})

module.exports = mongoose.model('Task',projectTaskModel);

index.js

app.get('/project/:id',async(req,res) => {

    const project = await projectModel.findOne({_id:req.params.id});
    const test = project.populate('tasks');
    console.log(test);
    res.send(test);
})

邮递员

{
    "tasks": [
        "6086ba5837f40a20cc5be2b2",
        "6086bd16c0f35353b848e6cc"
    ],
    "_id": "6086b85b26bc1e79ac34b135",
    "title": "Second project",
    "desc": "This is a projcet I did TO DO for myself",
    "status": "completed",
    "__v": 2
}

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    在您的 ProjectModel.js 上,您已将任务初始化为 Schema.Types.ObjectId 类型和 'Task' 引用 这就是为什么当你尝试这个 > project.populate('tasks') 它只给你发回了身份证。 如果您想要完整的 Task 对象,请执行以下操作,当您获得任务的 ID 时,您使用这些 ID 向 ' Task ' 模型发出另一个请求,这一次您将获得完整的目的。 希望这能帮助你理解事情。

    【讨论】:

    • 但是 populate 的重点不是从任务 ID 中获取完整的对象吗?否则我只会手动操作。
    • 是的,重点是,试试这个>>app.get('/project/:id',async(req,res) => { const project =await projectModel.findOne({_id:req.params.id}) .populate('tasks').exec(function(error, tasks) { console.log(JSON.stringify(tasks, null, "\t")) }) 并把它作为参考link...如果你仍然没有得到你的期望,我建议你试试删除您的数据库并重新创建您的用户和任务,然后重试。
    猜你喜欢
    • 2019-05-29
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 2016-01-01
    • 2013-11-23
    • 2013-12-17
    • 2015-08-16
    相关资源
    最近更新 更多