что я делаю неправильно?Mongoose зависает после использования findOneAndUpdate()
Я использую mongoose и node.js для сохранения некоторых данных в mongodb. Сама программа работает, но меня раздражает то, что после обнаружения и обновления документов программа все еще висит и не закрывается.
Я думаю, что проблематичная часть является функцией обратного вызова в findOneAndUpdate().
У меня есть мангуста модель (simpleModel.js):
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var simpleSchema = new Schema({
a: String,
b: String,
c: String,
somearray: [{index: String}],
timestamp: {type: Date, default: Date.now}
});
var Simple = mongoose.model('Simple', simpleSchema);
module.exports = Simple;
и главный JS файл (problemSimplified.js):
var mongoose = require('mongoose');
var dbURI = 'mongodb://localhost:27017/testing';
mongoose.connect(dbURI);
// CONNECTION EVENTS
mongoose.connection.on('connected', function() {
console.log('Mongoose default connection open to ' + dbURI);
});
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
mongoose.connection.on('disconnected', function() {
console.log('Mongoose default connection disconnected');
});
// If the Node process ends, close the Mongoose connection
process.on('SIGINT', function() {
mongoose.connection.close(function() {
console.log('Mongoose disconnected...');
process.exit(0);
});
});
var Simple = require('./simpleModel.js');
function doSomethingAndSave(){
var myArray = [
{a:5,b:4,c:6},
{a:1,b:2,c:3},
{a:0,b:3,c:3}
]
myArray.map(function (element,index){
//following is problematic part
Simple.findOneAndUpdate(
//query - this part works correctly
{a: element.a, b: element.b, c: element.c},
//insert (update) - this part works correctly
{
$set: {a: element.a, b: element.b, c: element.c},
$push: {somearray: {index: index}}
},
//options - just some settings (i guess it works too)
{safe: true, upsert: true, new : true},
//callback function - I guess this part is the problem, but why?
function(err, model) {
if (err) {
console.log(err);
strOutput = 'Oh dear, we\'ve got an error';
} else {
console.log('updated');
}
}
);
})
}
doSomethingAndSave();
Может кто-нибудь, пожалуйста, объясните мне, почему?
Заранее спасибо.
Не могли бы вы привести пример, как переписать его с помощью обещаний? Я не думаю, что правильно понял эту вторую ссылку. благодаря – suchoss