更新文档数组中的值而不删除其他值



我想更新一个值,当一个文件在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}
}
],
})

我想在下载时将filedownloads更改为true,所以我试着在下载函数之后运行这个:

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

但是,当它将filedownload更新为true时,它也删除了文件名和id值

您必须像这样使用位置运算符$:

通过这种方式,您告诉mongo:"查找id为id here2的文档,然后更新找到的文档(使用位置操作符$)并将值fileDownloaded设置为true"。

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

例子

最新更新