Обновите значение в массиве документов, не удаляя другие значения

#node.js #mongodb #mongoose

Вопрос:

Я хочу обновить одно значение, когда файл загружается в массив в документе в MongoDB. По какой-то причине он обновляет его, но также удаляет все остальные значения объекта в массиве. Кто-нибудь знает, как обойти эту проблему?

Моя модель выглядит так:

     token: {
        type: String,
        required: true
    },
    apiKey: {
        type: String,
        required: true
    },
    documents: [
        {
        filename: {type: String, required: true },
        id: {type: String, required: true},
        fileDownloaded: {type: Boolean, required: true}
        }
    ],
})
 

Я хочу изменить значение fileDownloaded на true при загрузке, поэтому я попытался запустить это после функции загрузки:

 const files = await File.findOneAndUpdate({
    "documents.id": "id here2"
}, {
    "documents": [{
        "fileDownloaded": "true"
    }]
}, {
    useFindAndModify: false
})
 

Однако, когда он обновляет значение fileDownloaded до true, он также удаляет имя файла и значение идентификатора

Ответ №1:

Вы должны использовать позиционный оператор $ вот так:

Таким образом, вы говорите монго: «Найдите документ, в котором указан идентификатор id here2 , а затем обновите найденный документ (используя позиционный оператор $ ) и установите значение fileDownloaded true «.

 await File.findOneAndUpdate({
  "documents.id": "id here2"
},
{
  "$set": {
    "documents.$.fileDownloaded": true
  }
},
{useFindAndModify: false})
 

Пример здесь