【问题标题】:Update value in document array without deleting other values更新文档数组中的值而不删除其他值
【发布时间】:2021-11-21 07:16:59
【问题描述】:

当文件下载到 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 时,它​​也会删除文件名和 id 值

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

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

    例如here

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2013-02-26
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多