我有一个用户模式和一个任务模式。 (如下所示)
创建任务时,任务的“作者”字段将填充用户ID。但是,即使运行.populate(“ tasks”),该用户的task数组也永远不会获得任何值。
我尝试过先搜索用户,然后再填充,反之亦然。试图查看猫鼬文档,但不确定其工作原理。
用户架构
const UserSchema = new mongoose.Schema( {
name: {
type: String,
required: true
},
password: {
type: String,
required: true,
trim: true,
unique: true
},
email: {
type: String,
required: true,
unique: true,
validate( value ) {
if ( !validator.isEmail( value ) ) {
throw new Error( "Email is unvalid" );
}
}
},
tasks: [ {
type: mongoose.Schema.Types.ObjectId,
ref: "Task"
} ],
tokens: [ {
token: {
type: String
}
} ]
} );
const User = mongoose.model( "User", UserSchema, "users" );
module.exports = User;
任务架构
const TaskSchema = mongoose.Schema( {
name: {
type: String,
required: true,
unique: true
},
description: {
type: String
},
completed: {
type: Boolean,
default: false
},
author: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
} );
const Task = mongoose.model( "Task", TaskSchema, "tasks" );
module.exports = Task;
任务的创建(req.user._id来自中间件)
router.post( "/api/tasks", auth, async ( req, res ) => {
const task = await new Task( {
_id: new mongoose.Types.ObjectId(),
name: req.body.name,
description: req.body.description,
author: req.user._id
} );
task.save( ( error ) => {
if ( error ) {
throw new Error( error );
}
if ( !error ) {
User.find( {} ).populate( "tasks" ).exec( ( error, tasks ) => {
if ( error ) {
throw new Error( error );
}
} );
}
} );
res.send( task );
} );
当我搜索用户,然后填充任务字段,然后在console.log用户时,我得到的只是关于用户的信息,但是任务数组仍然为空。
我是按错误的顺序做某件事,还是错过了一步?
谢谢您的时间
答案 0 :(得分:2)
这不会自动完成。也就是说,Mongoose将不会推送到用户的tasks
数组来保存其任务的ID。您需要手动执行此操作:
user.tasks.push(task);
更多详情,请访问Refs to children。