2015-11-05 2 views
4

Это мой код для получения данных из группы groupname, которая инициализируется именем коллекции. Я хочу перебрать данные, хранящиеся в документе, с помощью цикла foreach.как точно использовать foreach в nodejs для операций Mongodb

var db = mongojs('login'); 

    var cursor = db.collection(groupname).find(); 
    console.log(cursor); 

    cursor.each(function(err, doc) { 
     console.log(doc._id); 

     mongo.collection(doc._id + "group", function(err, collection) { 
      collection.remove({"groupname": groupname}); 
     }); 
    }); 

Я пытался делать db.collectionname.find().forEach(....), но я получил сообщение об ошибке о том, что такая функция не существует. Пожалуйста помоги.

ответ

2

Используйте each() метод перебора всех документов для find() курсора:

// Grab a cursor 
var cursor = db.collection(groupname).find(); 
console.log(cursor); 

// Execute the each command, triggers for each document 
cursor.each(function(err, doc) { 
    console.log(doc._id); 
    // Fetch a collection to remove document 
    mongo.collection(doc._id + "group", function(err, collection) { 
     collection.remove({"groupname": groupname}); 
    } 
}); 

- UPDATE -

Видя, что вы используете mongojs библиотеки после редактирования, вам необходимо передать функцию обратного вызова для обработки результатов запроса, поскольку Node.js imp lements асинхронной парадигмы и почти все всегда обратный вызов, которая позволяет вашему приложению быть неблокирующим и высокопроизводительными:

// connect now, and worry about collections later 
var db = mongojs('login') 
var groupcollection = db.collection(groupname) 

groupcollection.find({}, function(err, groups) { 
    if(err || !groups) console.log("No groups found"); 
    else groups.forEach(function(group) { 
     console.log(group); 
     mongo.collection(group._id + "group", function(err, collection) { 
      collection.remove({"groupname": groupname}); 
     }); 
    }); 
}); 
+0

Привет. Я получаю следующую ошибку: TypeError: cursor.each не является функцией –

+0

@sachinhunur Можете ли вы изменить свой вопрос, чтобы включить код, в котором объект 'db' был создан или инициализирован? – chridam

+0

Я отредактировал изменения –

4

find() вызова для извлечения записей из Монго DB является асинхронным. Вы пытаетесь использовать документы еще до того, как данные будут доступны. Вы должны иметь петлю forEach в обратном вызове find().

`

db.collection(groupname).find({}, function(err, doc){ 
console.log(doc); 
doc.forEach(function(err,doc){ 
    console.log(doc._id); 
    db=mongo.collection(doc_id+"group"); 
    db.remove({"groupname":groupname}); 
}); 
}); 

`

+0

Я пробовал использовать ваш код. Код выполняется, но ничего не происходит. Элемент управления не входит в функцию (err, doc). Любая идея почему? –

+0

эй я понял, где я ошибся. Я удалял сборку, прежде чем он сможет выбрать данные. Теперь я получаю сообщение на консоли, которое показывает значение для doc._id как undefined. –

Смежные вопросы