Mon goose FindOneAndUpdate встроенный объект и возвращение родителя - PullRequest
1 голос
/ 04 февраля 2020

У меня похожая проблема, изложенная в этом вопросе , но я натыкаюсь на другой аспект. У меня есть массив объектов / вложенных документов, вложенных в документ в моей базе данных mon go, схема, подобная этой ...

const projectSchema = new mongoose.Schema({
   name: {
      type: String
   },
  ...
   stakeholders: [{
    stakeholderTitle: {
        type: String,
        max: 150,
        required: [true, 'A stakeholder must have a title.']
        },
        ...
    }],

, что мне нужно сделать, это обновить конкретный встроенный объект на основе запрос, но мне все еще нужно потом вернуть родительский документ. Основываясь на ответе на этот вопрос , я смог получить родительский документ, используя идентификатор для вложенного документа, но когда я попытался обновить вложенный документ, я не смог понять это. Это мой запрос

const filter = { 'stakeholders._id': req.body.stakeholderId }
const update = { stakeholderTitle: req.body.stakeholderTitle } // suspect the problem is here

let project = await Project.findOneAndUpdate(filter, update, {
    new: true,
    runValidators: true
})

Это выбирает родительский документ, как предполагалось, и я предполагаю, что мой аргумент 'update' - это то, где проблема, но я не совсем уверен, как обновить, когда мой запрос уже «находит» на основе идентификатора, который я хочу, но не «обновляет».

1 Ответ

1 голос
/ 06 февраля 2020

Ваш оператор update ожидает, что stakeholderTitle будет на уровне root вашего документа. Чтобы правильно определить путь, вы должны использовать позиционный оператор $ :

const update = { 'stakeholders.$.stakeholderTitle': req.body.stakeholderTitle }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...