#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})
Пример здесь