有没有办法对 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服务器实例或更高版本,它就不会破坏代码。