我有这个问题模式
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');
但这不起作用。
答案 0 :(得分:0)
您需要填充已回答的字段。
const = questions = await Question.find().populate('answered');
答案 1 :(得分: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": "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
}
]