У меня проблемы с сохранением довольно большой модели, после model.save()
сохраняется только часть модели. В обещании возвращается правильная модель, но база данных совершенно другая.
Модель:
// Quiz model
title:{
type: String,
required: true
},
points: {
type: Number,
default: 1
},
towards: [Object],
questions: {
type: Object,
require: true
},
reviews: {
type: [Object],
},
rating: {
type: Number,
default: 0
}
Сценарий обновления модели:
const { qid, uid, right, review } = req.body;
.then( async quiz => {
const user = await User.findById(uid)
return { quiz, user };
})
.then( data => {
var quiz = data.quiz;
var user = data.user;
var attempt = {
correct_answer: right,
incorrect_answer: Object.keys(quiz.questions).length-righ
}
right == Object.keys(quiz.questions).length ? attempt.complete = true : attempt.complete = false;
if(review){
quiz.rating = 0;
quiz.reviews.push(review);
quiz.reviews.forEach( review => {
quiz.rating += review.rating;
})
quiz.rating = quiz.rating/quiz.reviews.length;
}
// user._id = 5e2fed3c5c4bf200c8752868
quiz.towards[0].staff[user._id].attempts.push(attempt);
quiz.towards[0].staff[user._id].check = true
return quiz.save();
})
Что сохраняется в базе данных:
Что возвращено в обещании:
{
from: 2020-01-28T10:14:05.953Z,
to: 2020-01-28T10:14:05.953Z,
points: 1,
towards: [
{ branchId: 5e2ffa0e52601856147d62c9, staff: {
'5e2fed3c5c4bf200c8752868': { check: true, attempts: [
{
correct_answer: 2,
incorrect_answer: 0,
points: 2,
complete: true
}
],
complete: false },
'5e2fed3c5c4bf200c8752869': { check: false, attempts: [], complete: false },
'5e2fed3c5c4bf200c875286e': { check: false, attempts: [], complete: false }
},
{ branchId: 5e2ffaba52601856147d62cb, staff: {} }
],
upload_at: 2020-01-28T10:14:05.000Z,
reviews: [
{
rating: 3,
text: 'some text',
author: '5e2b0be2dcd6e72a288a5424'
}
],
rating: 3,
_id: 5e300996ad64755794bab204,
title: 'Quiz',
description: 'some text',
author: '5e2ff7571c9d440000f1b560',
questions: {
...
}
}
Я пытался использовать quiz.markModified('towards.staff')
, но получил MongoError error: Cannot create field 'staff' in element
Я в замешательстве. Почему не сохраняется то, что я отправляю?