如何修复 NodeJS MongoDB 'Cannot read property 'high_' of null'

当遇到类似这样的错误消息

nodejs_mongo_traceback.txt
TypeError: Cannot read property 'high_' of null
    at Long.equals (/home/uli/dev/NMUN/node_modules/bson/lib/bson/long.js:236:31)
    at nextFunction (/home/uli/dev/NMUN/node_modules/mongodb-core/lib/cursor.js:473:16)
    at Cursor.next (/home/uli/dev/NMUN/node_modules/mongodb-core/lib/cursor.js:763:3)
    at Cursor._next (/home/uli/dev/NMUN/node_modules/mongodb/lib/cursor.js:211:36)
    at nextObject (/home/uli/dev/NMUN/node_modules/mongodb/lib/operations/cursor_ops.js:192:10)
    at hasNext (/home/uli/dev/NMUN/node_modules/mongodb/lib/operations/cursor_ops.js:135:3)
    (...)

你可能拥有类似这样的代码:

cursor_example.js
const cursor = db.getCollection('mycollection').find({})
while (cursor.hasNext()) {
    const doc = cursor.next();
    // ... 处理 doc ...
}

解决方案非常简单:由于 find()cursor.hasNext()cursor.next() 都返回 Promise,你不能直接使用它们的结果。

此示例向你展示如何使用 async/await 正确执行此操作:

cursor_example_async.js
const cursor = await db.getCollection('mycollection').find({})
while (await cursor.hasNext()) {
    const doc = await cursor.next();
    // ... 处理 doc ...
}

为此请记住包含此代码的函数需要是 async 函数。请参见 Mozilla 文档或搜索 Javascript async tutorial 以了解详情!


Check out similar posts by category: Databases, Javascript