我的用户模型结构有点像这样:
const userSchema = new mongoose.Schema({
email: { type: String, unique: true },
password: String,
todosDo: [models.Do.schema],
}
孩子"做"架构有点像这样(在不同的文件中):
const doSchema = new mongoose.Schema({
name: {type: String, default : ''},
user: {type: mongoose.Schema.ObjectId, ref: 'User'},
createdAt: {type : Date, default : Date.now}
});
我正在试图找出如何为已登录用户检索todosDo数组。这是我到目前为止所得到的:
// Get all "Do" todos from DB
// Experimenting to find todos from certain user
User.findById(req.user.id, function(err, user){
if(err){
console.log(err);
} else {
doTodos = user.todosDo, // this obviously doesn't work, just an idea of what I was going for
console.log(doTodos);
finished();
}
});
我是否引用了孩子/家长的错误,或者我只是没有检索到该阵列?非常感谢任何帮助!
答案 0 :(得分:0)
到目前为止,我猜您可能希望编辑为原始js对象,因此您需要使用lean()
函数。不使用lean()
函数用户是mongoose对象,因此您无法修改它。
可以试试这个:
User.findById(req.user.id)
.lean()
.exec(function (err, user) {
if(err){
console.log(err);
return res.status(400).send({msg:'Error occurred'});
}
if(!user) {
return res.status(400).send({msg:'User Not found'});
}
doTodos = user.todosDo;
console.log(user.todosDo); // check original todos
console.log(doTodos);
return res.status(200).send({doTodos : doTodos }); // return doTodos
});
要从不同的模型中引用父模式中的子模式,您可以通过其schema
属性访问模型的模式。
在doSchema.js
档案
const doSchema = new mongoose.Schema({
name: {type: String, default : ''},
user: {type: mongoose.Schema.ObjectId, ref: 'User'},
createdAt: {type : Date, default : Date.now}
});
module.exports = mongoose.model( 'DoSchema', doSchema );
<{1>}文件中的
user.js
答案 1 :(得分:0)
感谢大家的帮助!我的问题是我需要将后期路线中所有新创建的待办事项推送到todosDo,然后我可以在获取路线上检索它们。一切都在现在!