post 作者 ID 在节点 js 中变成作者用户名 mongodb

post author Id turn into author username in node js for mongodb

我想在前端显示我的 post 的作者姓名。所以我想根据它的用户 ID 找到 post。但在模型模式中,我在 post 模式中使用了用户的对象 ID。 这是我的用户架构:

const mongoose = require('mongoose');

// user schema
const userSchema = new mongoose.Schema(
  {
    email: {
      type: String,
      trim: true,
      required: true,
      unique: true,
      lowercase: true
    },
    name: {
      type: String,
      trim: true,
    },
    password: {
      type: String,
      required: true
    },
    salt: String,
bio: {
    type: String,
    trim: true
  },
    role: {
      type: String,
      default: 'subscriber'
    },
    
    resetPasswordToken: String, 
    resetPasswordExpire: Date,
  },
  {
    timestamps: true
  }
);


module.exports = mongoose.model('User', userSchema);

这是我的post架构模型:

const mongoose = require("mongoose");

const PostSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true,
      },
    
      content: {
        type: String,
        required: true,
      },
      comments: [{
        text: String,
        created: { type: Date, default: Date.now },
        postedBy: { type: mongoose.Schema.ObjectId, ref: 'User'}
      }],
      created: {
        type: Date,
        default: Date.now
      },
      creator: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User",
        
      },
    },
    {
      timestamps: true,
    },
    );
    

const Post = mongoose.model("Post", PostSchema);

module.exports = Post;

这是我的 post 特定用户 ID 列表的路由器:

exports.postByUser=async(req,res)=>{
  
  try
  {
    const userID=async()=>{
      await User.findById({ _id:req.params.id})
     .then(posts=>{
       res.status(200).json(posts.name)
       
     })
   }  

   await Post.find({creator: req.params.id})
    .then(posts=>{
      res.status(200).json(posts)

    })
   }catch(error){
    res.status(500).send({error: error.message});
  };
}

router.route('/post/mypost/:id').get(requireSignin,postByUser);

我的目标是获得一个 post 列表,其中每个 post 的创建者都会有用户名。我怎样才能在 nodejs 中实现它?

我是这样解决的:

exports.postByUser=async(req,res)=>{  
  try
  {
    await Post.find({creator: req.params.id})
    .populate({path:'creator', select:'name -_id'})
    .then(post=>{
      res.status(200).json(post)    
    })

   }catch(error){
    res.status(500).send({error: error.message});
  };
}

成功了