javascript - 我有一个带有子架构的架构。我想更新子架构中的特定数据
问题描述
这是我的架构
const mongoose = require('mongoose')
const MaterialListSchema = new mongoose.Schema({
nomenclature:{
type: String,
required: true
},
national: {
type: String,
required: true
},
partnumber:{
type:String,
required:true
},
quantity: {
type: Number,
required: true
},
unit:{
type: String,
required: true
},
price: {
type: Number,
required: true
}
})
const MrrlSchema = new mongoose.Schema({
aircrafttype:{
type: String,
required: true
},
mrrlcategory:{
type: String,
required: true
},
materiallist: [MaterialListSchema]
})
const Mrrl = mongoose.model('Mrrl', MrrlSchema)
module.exports = Mrrl
这是我的更新代码。但它会删除所选中的所有子文档,并且只剩下剩余的
Mrrl.updateOne({
'materiallist': {$elemMatch: { _id: req.params.id}}
},{
$set: { materiallist: req.body }
}).then((data)=>{
console.log(data)
})
解决方案
如果我理解你的问题,你需要使用 arrayFilters
// it is your req.body
const newMaterial = {
nomenclature: '2'
};
const result = await MrrlSchema.updateMany({ 'materiallist': {$elemMatch: { _id: req.params.id }} },
{ "$set": { "materiallist.$[material]": newMaterial } },
{ "arrayFilters": [ { "material._id": req.params.id } ] });
注意:arrayFilters 只能用于 3.6+ mongo
推荐阅读
- computer-science - 什么算法可以找到无根非二叉树的直径?
- html - 登录 rvest 后的 Scape 数据
- java - 如何根据 Spark 中的日期时间值过滤数据集
- javascript - 如何减少从反应中导入
- python - mpld3.show 显示空白 html
- python - 以特定时间间隔重新采样 DataFrame
- python - 尝试使用 Python 查询 DeltaDNA 时“没有结果。以前的 SQL 不是查询”
- javascript - R:使用 doPostBack 脚本中的内容抓取 aspx
- eloquent - 如果主模型上存在列值或 Eloquent 中的关系,我如何选择一行
- batch-file - 将批处理 If/ELSE 语句分成多行 - 难以阅读的代码