javascript - 使用 mongoose 批量更新 MongoDB 文档
问题描述
为 mongodb 数据库中的所有文档更新一个字段的最佳方法是什么?
假设这是我的对象数组
const data = [
{
_id: '21381ubdjhbajhda',
name: 'Samuel'
},
{
_id: '21381ubdj2222bajhda',
name: 'Jack'
},
{
_id: '21384441ubdjhbajhda',
name: 'David'
},
and 45000 items more
]
所以最简单的方法是
async function updateAll () {
const data = [
{
_id: '21381ubdjhbajhda',
name: 'Samuel'
},
{
_id: '21381ubdj2222bajhda',
name: 'Jack'
},
{
_id: '21384441ubdjhbajhda',
name: 'David'
},
and 45000 items more
]
await Promise.all(data.map(async (element) => {
const {_id, name} = element;
findByIdAndUpdate(_id, { $set: { name: name } }, function(err,data) {
if (err) return handleError(err);
});
}));
}
另一种方法是使用批量操作,如下所示,但它不起作用:
function updateAll () {
var bulk = db.persons.initializeOrderedBulkOp();
data.map((element) => {
const {_id, name} = element;
bulk.find( { _id: _id } ).update( { $set: { name: name } } );
})
bulk.execute();
}
但是还有其他更好的方法可以做到这一点吗?有关如何批量更新文档的任何建议?请记住,我尝试更新的字段因文档而异。谢谢
解决方案
推荐阅读
- python - Python 重构 - 多个类中的冗余函数
- google-analytics - 为什么 Google Analytics(分析)中的主页和受众概览之间的用户数不同?
- react-native - ReferenceError:找不到变量:nativeFabricUIManager
- mysql - TextField Django 的默认最大长度是多少?
- android - NestedScrollView、LinearLayout 超出约束过度滚动
- appium - ModuleNotFound:没有模块名称“appium”
- ios - 按 id 从数组中提取文本
- c++ - 对象或库文件是使用比其他对象更旧的编译器创建的;重建旧对象和库...?
- c# - 如何显示二维数组中的所有值?
- apache - 请求方法中有关 .htaccess 的问题