【问题标题】:MongoDB : Update an object in a document's arrayMongoDB:更新文档数组中的对象
【发布时间】:2020-12-11 11:31:35
【问题描述】:

我有以下收藏:

{
    "_id": "5fcde7d433d4303b242a8048",
    "model": "CL",
    "type": "ARCHCOMP",
    "idProject": "5fcde7d133d4303b242a8041",
    "qtts": [
        {
            "component": "5fca0fbac09bc7bca5628256",
            "qttEU": 5,
            "qttUSA": 10,
            "qttAS": 20
        },
        {
            "component": "5fca136ec09bc7bca5628257",
            "qttEU": 10,
            "qttUSA": 15,
            "qttAS": 25
        }
    ]
},
{
    Other documents...
}

我需要更新特定文档(也给出了 id)的特定组件(给出了 id)的字段 'qttEU'、'qttUSA' 和 'qttAS',但我无法使其工作。 ..

这是我尝试过的:

Document.updateOne({ _id: "5fcde7d433d4303b242a8048", "qtts.component": "5fca0fbac09bc7bca5628256" },
                   { $set: {"qtts.$.qttEU": 11, "qtts.$.qttUSA": 12, "qtts.$.qttAS": 13 }})

我收到文档已成功更新的响应,但是当我检查数据库时,值未更新...
如果我用那个查询数据库:

Document.findOne({ _id: "5fcde7d433d4303b242a8048", "qtts.component": "5fca0fbac09bc7bca5628256" })

它返回给我的好文件。我不明白我做错了什么。

【问题讨论】:

    标签: arrays mongodb object


    【解决方案1】:

    试试这个查询。 qtts 是一个数组,所以你应该使用 $elemMatch 来匹配数组中的值:-

    Document.updateOne({ _id: "5fcde7d433d4303b242a8048", qtts:{ $elemMatch: { component: "5fca0fbac09bc7bca5628256"}}},
                   { $set: {"qtts.$.qttEU": 11, "qtts.$.qttUSA": 12, "qtts.$.qttAS": 13 }})
    

    【讨论】:

    • 非常感谢,你给了我一半的问题解决方案:)
    【解决方案2】:

    好的,我解决了。
    首先,我做错了我的查询。正如 AartiVerma 回答我的那样,我必须这样做

    Document.updateOne({ _id: "5fcde7d433d4303b242a8048", qtts:{ $elemMatch: { component: "5fca0fbac09bc7bca5628256"}}},
                       { $set: {"qtts.$.qttEU": 11, "qtts.$.qttUSA": 12, "qtts.$.qttAS": 13 }})
    

    代替

    Document.updateOne({ _id: "5fcde7d433d4303b242a8048", "qtts.component": "5fca0fbac09bc7bca5628256" },
                       { $set: {"qtts.$.qttEU": 11, "qtts.$.qttUSA": 12, "qtts.$.qttAS": 13 }})
    

    其次,我的猫鼬模式是错误的。就像:

    const mongoose = require('mongoose');
    const sheetSchema = mongoose.Schema({
        model: { type: String },
        type: { type: String },
        qtts: { type: Array },
        idProject: { type: String }
    });
    module.exports = mongoose.model('Sheet', sheetSchema);
    

    而不是:

    const mongoose = require('mongoose');
    const sheetSchema = mongoose.Schema({
        model: { type: String },
        type: { type: String },
        qtts: [{ component: String, qttEU: Number, qttUSA: Number, qttAS: Number }],
        idProject: { type: String }
    });
    module.exports = mongoose.model('Sheet', sheetSchema);
    

    注意 qtts

    的区别

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2021-07-24
      • 2023-04-04
      • 2021-08-08
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多