[英]MongoDB findAndModify: >>> find and update object in document's array
[英]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.