猫鼬.Populate()返回空数组

时间:2019-06-05 13:10:01

标签: javascript node.js mongodb express mongoose

我不明白问题是什么。 以及为什么“任务”数组中的每个元素都为空。

Schema = mongoose.Schema;

const userSchema = new Schema({
    email: {
    type: String,
    required: true 
},  
password: {
    type: String,
    required: true 
},
tasks: [{type: Schema.Types.ObjectId, ref: 'Task'}]
}
);

const taskSchema = new Schema({
title: String
});

const User = mongoose.model('User', userSchema);
const Task = mongoose.model('Task', taskSchema);

// Add some default to DB
const task1 = new Task({
title: "Welcome! Here You Can:"
});

const task2 = new Task({
title: "ADD EDIT DELETE SHARE your TASKS "
});

const defaultTasks = [task1, task2];

创建新用户时,我添加defaultTasks

const newUser = {
    email: req.body.email,
    password: req.body.password,
    tasks: defaultTasks
};

获取用户任务

app.get('/tasks/', function(req, res){
const email = req.query.user;  
User
    .findOne({email: email})
    .populate('tasks')
    .exec()
    .then(foundUser => {

        console.log(foundUser);
        const data = [];
        Object.keys(foundUser.tasks).forEach(function(key) {
        const val = foundUser.tasks[key];
        data.push([val.title, val._id]);
    });
    res.send(data);
    console.log('Data to send ' + data);        

});
});

.Populate()console.log {

{任务:[5cf78ac1d08ee617fc89f7ed,5cf78ac1d08ee617fc89f7ee]

{{之后的任务:[],

请帮助!我发现的所有内容都无法解决我的问题。 可能是defaultTasks中的问题。但是我看不到。

1 个答案:

答案 0 :(得分:0)

您的代码不会将您的任务保存到DB,而只是创建一个对象。因此,稍后填充用户时,在数据库中找不到任何任务。

const task1 = await new Task({
  title: "Welcome! Here You Can:"
}).save();

// or

const task1 = await Task.create({
  title: "Welcome! Here You Can:"
});

P.s。当然,您可以按照自己的方式处理异步调用。