Операция обновления документа MongoDB не может быть скомпилирована

#node.js #mongodb

#node.js #mongodb

Вопрос:

Проверено много раз. Код выглядит нормально для меня, но компилятор постоянно не может скомпилироваться. Кто-нибудь может увидеть проблемы?

Я пытаюсь добавить объект обратной связи конкретного учителя в его / ее собственный массив feebacks.

структура документа:

 {
  studentName: 'xxx',
  teachers: [
    {
      teacherName: 'xxx',
      feedbacks: []
    }
  ]
}
 
 await collection.updateOne({
                studentName: req.body.name,
                teachers: {
                    $elemMatch: {
                        teacherName: {
                            $eq: 'xxx'
                        }
                    }
                }
            }, {
                $push: {
                    teachers.$.feedbacks: req.body
                }
            });
 

Результат

Комментарии:

1. teachers.$.feedbacks необходимо заключить в одинарные / двойные кавычки "teachers.$.feedbacks"

2. помимо синтаксической ошибки, это очень плохой дизайн. Вы можете сохранить отзывы в отдельной коллекции и заполнить их. Это позволяет вам обновлять и запрашивать более чистым способом в будущем.

Ответ №1:

Вы должны использовать двойные кавычки, чтобы избежать синтаксической ошибки.

Вы должны думать, что вы программируете в node.js и объект будет прочитан Монго. Но создается с использованием синтаксиса узла.

Итак, вы можете создать объект, ключом которого являются просто буквы без двойных кавычек, но для создания ключа с $ помощью или . вам нужно сделать с. " "

Поэтому вам нужно сделать: 'teachers.$.feedbacks': req.body