javascript - 尝试更新 mongo 数据中的数组
问题描述
我正在尝试更新/添加数据收集记录数组中的字段。
{ _id: 5f172788d775fa49dc0abe63,
filter_count: 5,
batch_key: '187aa0b2-f8b7-4b6a-8bd3-4d2df288e673',
report_id: '5f0ffbcdd67d70c1a3b143aa',
filters:
[ { _id: 5f17278bd775fa49dc0abe64,
name: 'USER 2 cards filter',
id: '5f0ffb96d67d70c1a3b143e7',
origin: 'USER' },
{ _id: 32334355fa49dc0abe545645,
name: 'USER 1 cards filter',
id: 'drdeseadasda3b143e34sad',
origin: 'STUDENT' } ],
__v: 0,
file_count: 1 }
以上是我拥有的数据,现在我试图在过滤器中添加一个字段,数组匹配id
但它没有发生在下面的代码中。
const result = await execute_model.findByIdAndUpdate(
_id,
{ "filters.id" : id{
$set:
{
status: 'SUCCESS'
info: 'SUCCESSFULLY CREATED'
}
}
}, {new: true});
_id
将会5f172788d775fa49dc0abe63
id
将是(将在过滤器数组中5f17278bd775fa49dc0abe64
)
因此,例如,当我通过上述内容时_id
,id
预期的结果如下
{ _id: 5f172788d775fa49dc0abe63,
filter_count: 5,
batch_key: '187aa0b2-f8b7-4b6a-8bd3-4d2df288e673',
report_id: '5f0ffbcdd67d70c1a3b143aa',
filters:
[ { _id: 5f17278bd775fa49dc0abe64,
name: 'USER 2 cards filter',
id: '5f0ffb96d67d70c1a3b143e7',
origin: 'USER',
status: 'SUCCESS',
info: 'SUCCESSFULLY CREATED'
},
{ _id: 32334355fa49dc0abe545645,
name: 'USER 1 cards filter',
id: 'drdeseadasda3b143e34sad',
origin: 'STUDENT' } ],
__v: 0,
file_count: 1 }
不知道为什么它没有发生,任何人都可以在这里帮助我。设置正确的查询?
编辑模型
report_id:{type:String,trim:true},
file_name:{type:String},
filters:[{
status:{type:String}, // Trying to add this
id:{type:String},
info:{type:String}, // Also this
name:{type:String},
origin:{type:String}
}],
batch_key:{type:String,trim:true},
file_count:{type:Number},
filter_count:{type:Number},
executed_time:{type:Date}
解决方案
您需要检查execute_model
以查看该模型是否具有字段status
,info
否则它不会更新。例子。
const execute_model = new Schema(
{
filter_count: Number,
batch_key: String,
report_id: String,
filters:[{name:String, status: 'String', info:'String', origin:'String' }]
}
因此,您需要 Schema 中的字段,否则它将被忽略。
一种选择是你找到一个
const data = await execute_model.find({ _id }).limit(1);
现在你有了全部数据。现在使用 javascript 数组方法更新数据并一次性更新 mongo。
const newData = await execute_model.findOneAndUpdate(
{ _id: data[0].id },
{ filter_count: 5,
batch_key: '187aa0b2-f8b7-4b6a-8bd3-4d2df288e673',
report_id: '5f0ffbcdd67d70c1a3b143aa',
filters:
[ { _id: 5f17278bd775fa49dc0abe64,
name: 'USER 2 cards filter',
id: '5f0ffb96d67d70c1a3b143e7',
origin: 'USER',
status: 'SUCCESS',
info: 'SUCCESSFULLY CREATED'
},
{ _id: 32334355fa49dc0abe545645,
name: 'USER 1 cards filter',
id: 'drdeseadasda3b143e34sad',
origin: 'STUDENT' } ],
__v: 0,
file_count: 1 }
)
推荐阅读
- typescript - 在传单地图上叠加静态图像
- php - 转换一串数字以从多维数组中获取值
- r - 使用 For 循环根据另一个矩阵的值有条件地填充矩阵
- owl - dotnetrdf 中的猫头鹰类 rdf
- windows - 如何测试启动powershell脚本的原因
- python - 如何在不同 .py 文件上的 Kivy 屏幕之间切换
- sqlite - Sqlite 按 AptNo 检索数据组并生成 7 天和 14 天的平均值
- docker - Docker 错误(等待标头时超出 Client.Timeout)
- python - 在 Dockerized 项目中使用带有 Poetry 的本地 python 项目
- excel - 如何使用模板回复所有人?