【问题标题】:how exactly to use foreach in nodejs for Mongodb operations如何在nodejs中使用foreach进行Mongodb操作
【发布时间】:2016-09-08 16:50:10
【问题描述】:

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

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(....),但我收到一个错误,提示该功能不存在。请帮忙。

【问题讨论】:

    标签: node.js mongodb foreach mongojs


    【解决方案1】:

    从 Mongo DB 获取记录的 find() 调用是异步的。您甚至在数据可用之前就尝试使用这些文档。您应该在find() 的回调中包含您的forEach 循环。

    `

    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)。知道为什么吗?
    • 嘿,我意识到我哪里出错了。在它可以选择数据之前,我正在删除集合。现在我在控制台上收到消息,显示 doc._id 的值未定义。
    【解决方案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 is not a function
    • @sachinhunur 您能否编辑您的问题以包含 db 对象被实例化/初始化的代码?
    • @sachinhunur 您没有提到您正在使用 mongojs 库,因此为什么上面的代码对您不起作用。
    • 我如何使它与 mongojs 一起工作?我不得不使用 mongojs 包装器,因为 find() 函数不起作用
    • @sachinhunur 我已经更新了我的答案以包含 mongojs 实现。
    猜你喜欢
    • 2013-11-18
    • 2012-06-08
    • 1970-01-01
    • 2014-12-01
    • 2015-02-20
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多