繁体   English   中英

Mongoose 填充返回的 ObjectID 而不是内容

[英]Mongoose Populate returning ObjectID instead of content

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

项目模型.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);

项目任务.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);

索引.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);
})

Postman

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

在您的 ProjectModel.js 上,您已将任务初始化为Schema.Types.ObjectId的类型和“任务”的引用,这就是为什么当您尝试此 > project.populate('tasks')时它只会向您发送 ID。 如果你想要完整的任务 object,那么做这样的事情,当你得到任务的 ID 时,你用这些 ID 向你的“任务” model 发出另一个请求,这次你将得到你的完整 ZA8CFDE6331BD49EB2AC96F891 希望这能帮助你理解事情。

我不确定你是否已经解决了这个问题,但这里有两件事我会尝试。

  1. 在一行而不是两行中进行查询调用。
  2. 填充后使用.exec()。

最后,它看起来像这样:

const project = await projectModel.findOne({_id:req.params.id}).populate('tasks').exec();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM