Это вопрос с вопросом here. Моя цель - обновить все документы с минимальным счетом.TypeError: Невозможно вызвать метод «каждый» неопределенного узла.js
var MongoClient=require('mongodb').MongoClient;
var server=require('mongodb').Server;
var mongoclient=new MongoClient(new server("localhost",27017));
mongoclient.connect("mongodb://localhost:27017/school",function(err,db){
var db=mongoclient.db('school');
cursor=db.collection('students').aggregate(
[
{$match : {"scores.type" : "homework"}},
{$unwind:"$scores"},
{$group : {_id : '$name','minimum' : { $min :"$scores.score" }}}
], function(err, result) { // callback
console.dir(result);
}
);
cursor.each(function(err,doc)
{
db.collection('students').update({'_id':doc._id},{$pull:{'scores':{'score':doc.minimum}}});
});
});
С помощью этого я получаю сообщение об ошибке
node app.js
undefined
/home/oroborus/node_modules/mongodb/lib/mongodb/mongo_client.js:475
throw err
^
TypeError: Cannot call method 'each' of undefined
at /home/oroborus/hw3-1/app.js:18:8
at /home/oroborus/node_modules/mongodb/lib/mongodb/mongo_client.js:83:5
at /home/oroborus/node_modules/mongodb/lib/mongodb/mongo_client.js:472:11
at process._tickCallback (node.js:415:13)
Согласно предыдущим программам, написанным мной и пост выше это выглядит правильно, то еще почему эта ошибка повторяется?
[Изменить]
Когда я сделал console.dir (курсор), он сказал undefined. Зачем ? Это может быть связано с асинхронным поведением Node.js, но как его исправить. Как сделать его синхронным.
посмотреть [здесь] (http://stackoverflow.com/questions/23955533/what- aggregation-cursor-methods-are-supported-by-nodejs-drivers) –
похоже, что вы можете получить курсор на 2.6+. у нас есть все сервер узла на openshift и openshift использует mongodb 2.4, поэтому я не знал об этом ... Спасибо за ссылку Saras ... – Ben
Я использую 2.6.9 i функция cursor.on работает для меня, но нормальный метод обновления данных не будет работать. Мне нужно, как обновить .. Я не могу найти это :( –