【发布时间】:2015-04-10 13:11:25
【问题描述】:
目前我正在运行这个任务:
var skip = 0;
var limit = 5;
gulp.task('add coordinates to visits', function(done) {
(function recurse() {
Visit.find({})
.skip(skip)
.limit(limit)
.populate('zone')
.exec(function cb(err, visits) {
if (err) {
throw err;
}
if (visits.length === 0) {
return;
}
async.each(visits, function iterateEvents(visit, next) {
if (!visit.zone) {
return next();
} else if (!visit.coordinates.lat || !visit.coordinates.lng) {
visit.coordinates = {
lat: visit.zone.geo.coordinates.lat,
lng: visit.zone.geo.coordinates.lng
};
}
visit.save(next);
}, function cb(err) {
if (err) {
throw err;
}
skip += limit;
setTimeout(recurse, 1000);
});
});
})();
});
但我敢肯定,一定有比使用skip、limit、`setTimeout.是否有一些运行更新任务的 mongo 或 mongoose 方法?
【问题讨论】:
-
您是否将这些文档保存回数据库?如果是这样,为什么不直接在数据库上更新?
-
是的,我是。我不小心漏掉了
visit.save(next);。您能否进一步解释您的评论。我该怎么做? -
可以直接使用
Model.update对数据库进行查询和更新。 -
但我仍然需要先查询数据库以获取要添加到访问中的
zone数据。那么有什么优势呢?看看我如何填充区域,然后将该数据直接添加到访问。 -
我错过了,但是否有任何区域不会被查询更新?这意味着您可以直接在 Zones 集合上运行类似的查询。