node.js - 获取错误 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');
});
});```
解决方案
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 docursor.map(function() { ... }, function() { ... }
) 没有做任何有意义的事情 - 如果您所做的唯一有意义的事情
.map
是将元素添加到另一个数组,您可以map
直接使用结果:(arr = cursor.map(...)
或者如果您想有选择性,请使用filter
)。
推荐阅读
- android - 如何在 Exoplayer 中仅缓存 DASH 的第一段?
- php - 如何在搜索中删除 html 标签
- css - 单击其他位置后侧面板不会消失
- jquery - 如何在数据表中首先显示特定的键值
- nginx - 由 certbot 生成的配置文件上的 ngnix www 到 no-www
- ruby - Ruby Roo Gem - 将 Excel xlsx 表读入哈希
- python - 安装 psutil 和配置 pypy 时出错
- angular - 生成构建后如何将Angular dist内容复制到另一个位置?
- python - aiohttp 路由器 - 不写入日志
- python - 将 dtype('O') 转换为 dtype('
我有 1000 个带有
timestamp
列的数据(常规 mySQL 时间戳),我将其分成两部分,称为data1
anddata2
,`data1['timestamp'].dtype` dtyp