Mongoose .Populate () возвращает пустой массив - PullRequest
0 голосов
/ 05 июня 2019

Я не понимаю, в чем проблема.И почему каждый элемент из массива 'tasks' равен нулю.

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 {

{tasks: [5cf78ac1d08ee617fc89f7ed, 5cf78ac1d08ee617fc89f7ee]

После {{tasks: [],

Пожалуйста, помогите!Все, что я нашел, не решило мою проблему.Возможно проблема в заданиях по умолчанию.Но я этого не вижу.

1 Ответ

0 голосов
/ 05 июня 2019

Ваш код не сохраняет вашу задачу в БД, он просто создает объект.Поэтому позже, когда вы заполняете User, в БД не будет найдено ни одной задачи.

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

// or

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

PS Конечно, вы можете обрабатывать асинхронные вызовы так, как вам хочется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...