簡體   English   中英

MongoDB:更新文檔數組中的 object

[英]MongoDB : Update an object in a document's array

我有以下收藏:

{
    "_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" })

它還給我一份好文件。 我不明白我做錯了什么。

試試這個查詢。 qtts 是一個數組,因此您應該使用 $elemMatch 來匹配數組中的值:-

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

好的,我解決了。
首先,我做錯了我的查詢。 正如 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 }})

其次,我的 mongoose 架構是錯誤的。 這就像是:

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的區別

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM