MongoDB批量更新性能问题

MongoDB批量更新性能问题,mongodb,Mongodb,我知道MongoDB支持批量插入,但不支持批量更新 批量插入数千个文档非常快,但更新数千个文档的速度非常慢。速度太慢,我现在使用的解决方法是删除旧文档并批量插入更新的文档。我不得不添加一些标志,将它们标记为无效,以及从失败的模拟“批量更新”中进行补偿所需的所有内容: 我知道这是一个糟糕且不安全的解决方案,但这是我能够达到所需性能的唯一途径 如果你知道更好的方法,请帮助我 谢谢 只要您使用的是MongoDB v2.6或更高版本,就可以使用批量操作来执行更新 示例来自: var bulk=db.it

我知道MongoDB支持批量插入,但不支持批量更新

批量插入数千个文档非常快,但更新数千个文档的速度非常慢。速度太慢,我现在使用的解决方法是删除旧文档并批量插入更新的文档。我不得不添加一些标志,将它们标记为无效,以及从失败的模拟“批量更新”中进行补偿所需的所有内容:

我知道这是一个糟糕且不安全的解决方案,但这是我能够达到所需性能的唯一途径

如果你知道更好的方法,请帮助我


谢谢

只要您使用的是MongoDB v2.6或更高版本,就可以使用批量操作来执行更新

示例来自:

var bulk=db.items.initializeUnderedbulkop; bulk.find{status:D}.update{$set:{status:I,points:0}; bulk.find{item:null}.update{$set:{item:TBD}; 批量执行;
只要您使用的是MongoDB v2.6或更高版本,就可以使用批量操作来执行更新

示例来自:

var bulk=db.items.initializeUnderedbulkop; bulk.find{status:D}.update{$set:{status:I,points:0}; bulk.find{item:null}.update{$set:{item:TBD}; 批量执行;
我也遇到过类似的情况,在做了反复试验之后,我在MongoDB或通过mongoose创建了一个索引,现在通过使用批量操作,即bulk.find{}.upsert.update{},数千个文档的速度非常快

例如:

var bulk = items.collection.initializeOrderedBulkOp();
bulk.find({fieldname: value, active: false}).updateOne({.upsert().updateOne({
    $set: updatejsondata,
    $setOnInsert: createjsondata        
});
Note: you need to use $push for storing in array like $set, you need to include $push 
example:
bulk.find({name: value, active: false}).updateOne({.upsert().updateOne({
    $set: updatejsondata,
    $push: {logdata: filename + " - " + new Date()} 
    $setOnInsert: createjsondata        
});
创建索引:在上面关于Items集合的案例中,您需要在搜索字段(即名称、活动)上创建索引

例如: Mongo命令行:

猫鼬模式:


希望这将帮助您完成批量操作

我也遇到过类似的情况,在尝试和出错之后,我在MongoDB中或通过mongoose创建了一个索引,现在使用批量操作,即bulk.find{}.upsert.update{},数千个文档非常快

例如:

var bulk = items.collection.initializeOrderedBulkOp();
bulk.find({fieldname: value, active: false}).updateOne({.upsert().updateOne({
    $set: updatejsondata,
    $setOnInsert: createjsondata        
});
Note: you need to use $push for storing in array like $set, you need to include $push 
example:
bulk.find({name: value, active: false}).updateOne({.upsert().updateOne({
    $set: updatejsondata,
    $push: {logdata: filename + " - " + new Date()} 
    $setOnInsert: createjsondata        
});
创建索引:在上面关于Items集合的案例中,您需要在搜索字段(即名称、活动)上创建索引

例如: Mongo命令行:

猫鼬模式:


希望这将帮助您完成批量操作

谢谢!我对它进行了测试,在V2.6上运行得非常好。有趣的是,即使您使用的是V2.4,C驱动程序也会接受批量语法,但在它内部执行起来似乎很慢。好了,看来是时候转到2.6了。谢谢!我对它进行了测试,在V2.6上运行得非常好。有趣的是,即使您使用的是V2.4,C驱动程序也会接受批量语法,但在它内部执行起来似乎很慢。嗯,现在似乎是时候转向2.6了。
ItemSchema.index({name: 1, active: 1}, {name: "itemnameactive"});