如何在Node.js中使用foreach进行MongoDB操作

4

这是我获取集合组名称数据的代码,该集合以集合名称初始化。我想使用foreach循环迭代存储在文档中的数据。

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个回答

6
find()调用从Mongo DB获取记录是异步的。你正在尝试在数据可用之前使用docs。你应该将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});
});
});

`


我尝试使用你的代码。代码执行了,但是没有任何反应。控制未进入函数(err,doc)。有什么想法吗? - sachin hunur
嘿,我意识到我的错误在哪里了。在它选择数据之前,我删除了集合。现在我在控制台上得到了一条消息,显示doc._id的值为未定义。 - sachin hunur

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});
    }
});

-- 更新 --

看到您在编辑后使用了mongojs库,因此需要传递回调函数来处理查询结果,因为Node.js实现了异步编程范式,几乎所有东西都是回调函数,这使得应用程序非阻塞且高性能:

// 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});
        });
    });
});

嗨。我遇到了以下错误:TypeError: cursor.each不是一个函数。 - sachin hunur
@sachinhunur,您没有提到您是否使用了mongojs库,因此上面的代码对您无效。 - chridam
如何使用mongojs使其正常工作?我不得不使用mongojs包装器,因为find()函数无法正常工作。 - sachin hunur
@sachinhunur,我已经更新了我的答案,包括mongojs的实现。 - chridam
非常感谢,你的代码起作用了。只需要做一个小改动。 - sachin hunur
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接