2016-08-22 106 views
0

我有一个用户模型结构有点像这样:子文档MongoDB中检索阵列

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

用户代码中的users.todosDo实际上是否是逗号?如果是这样,你不经意地将'doTodos'设置为'未定义'的console.log()。 – Mike

+0

@Mike它是,但我定义了这样的doTodos:'var doTodos = {};'在从数据库获取所有“Do”待办事项之前。或者那不是你所指的? –

回答

0

感谢您的帮助大家!我的问题是,我需要将所有新创建的待办事项都推送到todosDo,然后我可以在获取路线中检索它们。现在一切正常!

0

到目前为止,我想你可能想编辑为原始js对象,所以你需要使用lean()函数。没有使用lean()函数用户是猫鼬对象,所以你不能修改它。

可以试试这个:

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); 

user.js文件

var DoModel = require('./doSchema');// exact path 
const userSchema = new mongoose.Schema({ 
    email: { type: String, unique: true }, 
    password: String, 

    todosDo: [DoModel.schema], 
} 
+0

@shishab感谢您的回答,但是当我尝试运行它时,它只是继续加载并且不显示任何内容。但是,我知道应用程序已经登录到console.log,因为它会打印出仍然是空数组的doTodos。 –

+0

不断加载,因为它没有返回任何东西。更新的答案。确保'user'集合中的'todosDo'中有数据。 –