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

问题描述 投票:0回答:2

我有这个问题模式

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');但它不起作用。

node.js mongodb mongoose
2个回答
0
投票
您需要填写已回答的字段。

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


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

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, required: true }, 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") .populate("answered.user", "-password"); res.send(questions); });

这里是示例输出:

[ { "_id": "5dc12a6aa875cd0ca8b871eb", "user": { "_id": "5dc129eda875cd0ca8b871e8", "name": "user 1", "email": "[email protected]", "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": "[email protected]", "date": "2019-11-05T07:51:28.892Z", "__v": 0 } }, { "_id": "5dc12a6aa875cd0ca8b871ec", "user": { "_id": "5dc12a0aa875cd0ca8b871ea", "name": "user 3", "email": "[email protected]", "date": "2019-11-05T07:51:38.060Z", "__v": 0 } } ], "__v": 0 } ]

© www.soinside.com 2019 - 2024. All rights reserved.