如何从猫鼬的ID中获取名称?

我有这个问题模式

const QuestionSchema = new mongoose.Schema({
    user: {
        type: Schema.Types.ObjectId,ref: 'users'
    },question:{
        type:String
    },name:{
        type:String,},answered:[
        {
            user:{
                type:mongoose.Schema.Types.ObjectId,ref:'users'
            }
        }
    ]
})

和用户架构


const UserSchema = new mongoose.Schema({
    name:{
        type:String,required:true
    },email:{
        type:String,required:true,unique:true
    },password:{
        type:String,date:{
        type:Date,default:Date.now
    }
})

我想获得回答用户的名字。 我知道我必须使用填充,我尝试了类似 const questions = await Question.find().populate('buzzed'); 但这不起作用。

xiangxiangdetang 回答:如何从猫鼬的ID中获取名称?

您需要填充已回答的字段。

const = questions = await Question.find().populate('answered');
,

您需要这样填充:(这也是排除用户密码的好主意)

 Question.find({})
    .populate("user","-password")
    .populate("answered.user","-password");

我还有一些代码建议:

我们通常在模型(例如User)中使用首字母大写和单数名称。

user.js

const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
  name: {
    type: String,required: true
  },email: {
    type: String,required: true,unique: true
  },password: {
    type: String,date: {
    type: Date,default: Date.now
  }
});

const User = mongoose.model("User",UserSchema);

module.exports = User;

question.js

const mongoose = require("mongoose");

const QuestionSchema = new mongoose.Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,ref: "User"
  },question: {
    type: String
  },name: {
    type: String
  },answered: [
    {
      user: {
        type: mongoose.Schema.Types.ObjectId,ref: "User"
      }
    }
  ]
});

const Question = mongoose.model("Question",QuestionSchema);

module.exports = Question;

您可以使用以下查询填充用户:

const Question = require("../models/question");

router.get("/question",async (req,res) => {
  const questions = await Question.find({})
    .populate("user","-password");

  res.send(questions);
});

以下是示例输出:

[
    {
        "_id": "5dc12a6aa875cd0ca8b871eb","user": {
            "_id": "5dc129eda875cd0ca8b871e8","name": "user 1","email": "user1@gmail.com","date": "2019-11-05T07:51:09.625Z","__v": 0
        },"question": "question 1","name": "question 1 name","answered": [
            {
                "_id": "5dc12a6aa875cd0ca8b871ed","user": {
                    "_id": "5dc12a00a875cd0ca8b871e9","name": "user 2","email": "user2@gmail.com","date": "2019-11-05T07:51:28.892Z","__v": 0
                }
            },{
                "_id": "5dc12a6aa875cd0ca8b871ec","user": {
                    "_id": "5dc12a0aa875cd0ca8b871ea","name": "user 3","email": "user3@gmail.com","date": "2019-11-05T07:51:38.060Z","__v": 0
                }
            }
        ],"__v": 0
    }
]

本文链接:https://www.f2er.com/3162906.html

大家都在问