首页 > 解决方案 > 获取错误 cursor.map 不是函数

问题描述

我正在尝试连接到我们内部的 mongodb 云数据库。我收到错误 cursor.map 不是函数。如何解决此问题,我无法找到导致此错误的原因。

const dbConnectionUrl = `mongodb://${user}:${encodeURIComponent(pwd)}@0000000000.dev.cloud.company.net:27017/admin?retryWrites=true&w=majority`;



   const arr = [];
    MongoClient.connect(dbConnectionUrl, {
            useNewUrlParser: true, 
            useUnifiedTopology: true,
        },function(err, client){
            assert.equal(null, err);
            const cursor = client.db('tss-db').collection('jenkins-inventory').find({"instance" : "build01"}).toArray();
            cursor.map(function(instances, err){
                assert.equal(null, err);
                    arr.push(instances);
                    console.log(instances)
                }, 
                function(){
                    client.close()
            res.render('L2');        
        });
    });```

标签: node.jsmongodb

解决方案


toArray不返回数组。toArray涉及将所有对象从光标中拉出,这可能需要很长时间,因此是异步完成的。

toArray接受一个回调并返回一个then-able Promise,在 Cursor 将其所有对象放入数组后,可以使用其中任何一个执行函数:

someCursor.toArray(function(resultingArray) {
    // do something with resultingArray
});

或者

someCursor.toArray().then(function(resultingArray) {
    // do something with resultingArray
});

请注意,任何一个选项都会在光标清空后按时间顺序运行,这可能需要很长时间。同时,其他代码可能会运行;请参阅为什么我的变量在我在函数内部修改后没有改变?- 异步代码参考

此外,您的代码有点难以阅读,并且做了一些对我来说没有意义的事情:

  • 周围的缩进map令人困惑
  • 您将第二个函数参数传递给map(you do cursor.map(function() { ... }, function() { ... }) 没有做任何有意义的事情
  • 如果您所做的唯一有意义的事情.map是将元素添加到另一个数组,您可以map直接使用结果:(arr = cursor.map(...)或者如果您想有选择性,请使用filter)。

推荐阅读