arrays - 如何使用 id 匹配的 json 对 Mongo DB 对象数组进行批量更新
问题描述
我需要使用具有 id 的对象数组来更新 MongoDB 字段,需要在 JSON 对象中使用相同的 id 进行更新
如果我在 MongoDB 中有类似的东西
{
_id: "adqeer32423twefds",
books : [
{
id : 111,
name: "ABC"
},
{
id : 123,
name: "ABCD"
}
]
}
我有这样的 JSON 数据要插入 Mongo
{
_id: "adqeer32423twefds",
books : [
{
id : 111,
author: "ccc"
},
{
id : 123,
author: "dddd"
}
]
}
更新后,我需要 Mongo 集合中这样的最终数据
{
_id: "adqeer32423twefds",
books : [
{
id : 111,
name: "ABC",
author: "ccc"
},
{
id : 123,
name: "ABCD",
author: "dddd"
}
]
}
解决方案
const data = [
{ _id: 'id1', books: [{ id: 'id1_1', author: 'author1_1' }, /* ... */] },
/* ... */
];
const bulk = [];
for (const { _id, books } of data) {
for (const { id, author } of books) {
bulk.push({
updateOne: {
filter: { _id, 'books.id': id },
update: { $set: { 'books.$.author': author } }
}
});
}
}
// Check if bulk is not empty - it will throw otherwise.
if (bulk.length > 0) db.collection.bulkWrite(bulk);
推荐阅读
- python - 如何在pyspark中转置数据框?
- javascript - 三个 JS 将渐变应用于导入的模型
- java - 如何将 JAR 程序的输出文件写入 JAR 外部的目录?
- python - 自动 Savetxt 为 CSV Python
- google-sheets - 使用自定义脚本作为公式时如何使用单元格的值?
- tfs - YAML 管道中无法识别术语“System.DefaultWorkingDirectory”
- javascript - 替代 eval 将字符串转换为对象
- asp.net-core - 如何显示来自另一个表的列数据而不是数据表的外键数据
- flask - 使用 url_for 将加载值和输入值传递给函数
- azure - 如何将多个发布或构建从 Azure DevOps Pipeline 导出到桌面?