我有以下代码,找到缺少DateUTC的任何文档并循环并使用文档中包含的datestring值设置日期。数据通过JSON文件导入,因此日期需要转换为UTC日期。然而,当有> 1000条记录时,我正在“处理内存不足”。这些文件是相当大的JSON天气读数。我是MongoDb和Node的新手,但这不是很多要更新的数据,所以我觉得我做错了。
'use strict';
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var db = mongoose.connection;
var Grib = require('./models/grib.js');
var fs = require('fs');
var moment = require('moment');
//register call back events
db.on('error', console.error);
db.once('open', function () {
//do our DB work here
var today = moment().startOf('day');
var tomorrow = moment(today).add(1, 'day');
var yesterday = moment(today).add(-1, 'day');
Grib.find({ 'header.dateUTC': null }, {}, {}, function (err, array) {
for (var i = 0, len = array.length; i < len; i++) {
array[i].header.dateUTC = moment.utc(array[i].header.refTime).toDate();
array[i].save(function (err) {
if (err) console.log('save error:' + err);
});
};
console.log('Number of grib dates updated:' + array.length);
});
答案 0 :(得分:1)
您可以随时分页。例如,按1000批量提取,请记住,您必须对对象进行排序才能使其正常工作。
var index = 0;
Grib.find({ 'header.dateUTC': null }).sort('created_at').skip(index).limit(1000).exec(function (err, array) {
index += 1000;
.
.
.
了解nodejs异步性质。我建议你看一下async each 函数。