Mongoose批量更新操作

jtm*_*mon 5 javascript mongoose mongodb node.js

有没有办法在mongoose中对集合进行批量更新?我发现的策略使用了原始集合驱动程序,如下所示:

var bulk = Person.collection.initializeOrderedBulkOp();
bulk.find(query).update(update);
...
bulk.execute(callback)
Run Code Online (Sandbox Code Playgroud)

但是,bulk当我这样做时,是不确定的.是不是猫鼬不支持?

Nei*_*unn 9

注意:现代Mongoose .bulkWrite()直接在Model方法上发布支持.即使在MongoDB API的直接实现中也最好使用此方法,因为在连接到不支持"不支持"的MongoDB版本的情况下,它实际上"安全地降级"以使用批处理中提供的方法的"单独调用".批量API"本身.

它仍然调用与所描述的相同的基础"批量方法",而是软件决定如何正确地发送到服务器而不是您自己的代码需要做出此决定.

另请注意:正在进行的mongoose版本现在要求您以.connect()某种方式表示必须在其他操作继续之前解决连接.使用新的连接机制可确保.collection在调用时始终存在如下所述的访问器.


您可以这样做,但问题是当从基本驱动程序访问底层集合对象时,不会采用与实现的mongoose模型方法相同的预防措施.

所有模型方法都使用其他功能包装底层方法,但最常见的方法是在尝试访问方法之前确保数据库连接已打开.这确保了存在Db实例并且可以获得Collection()对象

.collection在模型上使用访问器后,您就可以自己完成所有操作了:

mongoose.connection.on('open',function(err,conn) {

   // now it's safe to use

   // { .. } Other code
   var bulk = Person.collection.initializeOrderedBulkOp();
   bulk.find(query).update(update);
   bulk.execute(callback)

});
Run Code Online (Sandbox Code Playgroud)

或者其他一些基本上确保实际建立连接的方法.

至于Bulk API方法的原生支持而没有深入到潜在的驱动程序级别,是的,正在编写当前的时间.但是你仍然可以自己实现它,只要你连接到MongoDB 2.6服务器实例或更高版本,它就不会破坏代码.