【发布时间】:2015-03-28 21:35:54
【问题描述】:
我有一个文档集合,我需要为所有文档添加一个新字段。如果我运行查询以获取所有文档,然后更新每一个 node.js 停止,可能是因为内存泄漏
这是我的代码
var express = require('express');
var geocoderProvider = 'google';
var httpAdapter = 'http';
var People = require("./models/people").collection.initializeOrderedBulkOp();
var app = express();
var geocoder = require('node-geocoder').getGeocoder(geocoderProvider, httpAdapter, {});
app.get('/', function (req, res) {
People.find({}, function (err, docs) {
if (err) {
res.send(err);
}else{
docs.forEach( function (doc){
geocoder.geocode({address: doc.address, country: 'Italy', zipcode: doc.cap}, function(error, value) {
doc.loc.coordinates[0]=value[0].latitude;
doc.loc.coordinates[1]=value[0].longitude;
People.update({ _id: doc._id }, { $set: { loc: doc.loc }}, { multi: true }, function (error){
if(error){
console.error('ERROR!');
}
});
});
});
}
});
});
var server = app.listen(3000, function () {
var host = server.address().address
var port = server.address().port
console.log('Example app listening at http://%s:%s', host, port)
});
有没有办法用猫鼬批量更新? 提前致谢
【问题讨论】:
-
你应该看看使用流 - 然后你可以暂停,进行更改,保存,然后恢复流 - 编辑:mongo 只允许原子更改(即一次更改一个文档 - 所以没有没有批量更改)
-
在我看来,node.js 在更新文档时不应该“停止”。关于使用 mongoose 进行批量更新,MongoDB 不支持多文档事务。如果您想实现一些接近的东西,请查看stackoverflow.com/questions/12493576/…