我有一个文档集合,我需要为每个文档添加一个新字段。如果我运行一个查询来获取所有文档,然后更新每个文档,则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)
});
有没有办法批量更新mongoose?提前感谢
发布于 2015-01-30 11:08:52
您可以下拉到集合级别并进行批量更新。此操作不是原子的-一些写入可能会失败,另一些可能会成功-但它将允许您在数据库的单个往返过程中进行这些写入。
它看起来像这样:
var bulk = People.collection.initializeUnorderedBulkOp();
bulk.find({}).update({});
bulk.find({}).update({});
...
bulk.execute(function(err) {
...
});
在这里查看文档:
http://docs.mongodb.org/manual/core/bulk-write-operations/
https://stackoverflow.com/questions/28218460
复制相似问题