У меня есть набор данных, и мне нужно добавить для каждого документа новое поле. Если я выполнить запрос, чтобы получить все документы и обновление каждого один node.js останавливается, может быть для памяти утечкиnodejs mongoose bulk update
Это мой код
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 «останавливался» при обновлении ваших документов. Что касается массового обновления с помощью мангуста, MongoDB не поддерживает транзакции с несколькими документами. Если вы хотите что-то реализовать, посмотрите http://stackoverflow.com/questions/12493576/multi-collection-multi-document-transactions-in-mongodb – influxd