簡體   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