如何从猫鼬的ID中获取名称? [英] How to get the names from the id's in mongoose?

查看:236
本文介绍了如何从猫鼬的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,
        required:true
    },
    date:{
        type:Date,
        default:Date.now
    }
})

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

I want to get the names of the users who answered. I know that I have to use populate, I tried something like const questions = await Question.find().populate('buzzed'); but it does not work.

推荐答案

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

You need to populate like this: ( it also a good idea to exclude user's passwords)

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

我还有一些代码建议:

对于模型(例如User),我们通常使用首字母大写和单数名称.

We generally use first letter capitalized and singular names for models, like 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,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

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

module.exports = User;

question.js

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;

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

And you can use the following query to populate users:

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

router.get("/question", async (req, res) => {
  const questions = await Question.find({})
    .populate("user", "-password")
    .populate("answered.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
    }
]

这篇关于如何从猫鼬的ID中获取名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆