我想要实现的是使用另一个字段的值更新集合中所有文档(百万+)的字段。由于在更新中无法引用文档本身,我必须使用一个函数,它可以工作...
db.Sounds.find({}).snapshot().forEach(
function(sound) {
var duration = NumberInt(sound.files[0].metadata.duration);
db.Sounds.update({
_id: sound._id
}, {
$set: {
duration: duration
}
});
}
);
...但它在Heroku上10分钟后超时,因为它执行速度非常慢(每次更新需要300-400ms),这是由于网络通信造成的。
另一种方法是使用eval运行JavaScript代码服务器端,但“heroku”用户似乎没有足够的权限来运行eval。
有没有解决这些限制的方法?