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

var bulk = Person.collection.initializeOrderedBulkOp();
bulk.find(query).update(update);
...
bulk.execute(callback)

但是,当我这样做时,bulk是未定义的。 Mongoose 不只是支持它吗?

最佳答案



您可以执行此操作,但是问题是,从基本驱动程序访问基础集合对象时,没有采取与已实现的 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)

});
或其他一些基本可确保已实际建立连接的方法。
至于在不深入底层驱动程序级别的情况下对Bulk API方法的 native 支持,是的,目前正在研究中。但是您仍然可以自己实现它,只要您连接到MongoDB 2.6服务器实例或更高版本,它就不会破坏代码。

09-25 17:33