请以任何方式在mongoose中执行此查询吗?
可以从mongodb v2.6
进行多次更新{
update: <collection>,
updates:
[
{ q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> },
{ q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> },
{ q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> },
...
],
ordered: <boolean>,
writeConcern: { <write concern> }
}
我找到了这个话题,但它很老了:Mongodb multi update with different value
thx everyone for suggetions
答案 0 :(得分:1)
根据您提供的详细信息,我假设您希望根据几个不同的条件和每个特定查询的特定更新值发布一系列更新查询。
然而,在更新MongoDB中的多个文档时,我将讨论两种可能的情况。
正如我之前提到的,如果您想要更新多个文档,有两种可能的情况:
db.collection.update()
,在触发操作时指定multi
参数Official MongoDB Docs bulk.find.update()
链接多个multi update
操作并批量执行Official MongoDB Docs 答案 1 :(得分:0)
好的这些是结果
var p_text_data = require("../public/import/p_100_k_text_cz.json"); //data with new vals
_und.map(p_text_data,function(vals,index) {
var new_name = vals.name + something;
e_textModel.collection.update({ 'id': vals.id }, { $set: { 'name': new_name } }, {upsert: false, multi: true});
});
每次迭代使用sinle更新,更新100k文档大约需要7秒以上
和下一个代码,使用批量,花费不到3秒
var bulk = e_textModel.collection.initializeUnorderedBulkOp();
_und.map(p_text_data,function(vals,index) {
ite++;
var new_name = vals.name + something;
bulk.find( { 'id': vals.id } ).update( { $set: { 'name': new_name } } );
});
bulk.execute();
修改强>
$var bulk = e_textModel.collection.initializeOrderedBulkOp();
在这种情况下,比UnorderedBulkOp快几倍