node.js - MongoDB Node.js 驱动程序 4.0.0 : Cursor session id issues in production on Vercel

标签 node.js mongodb aws-lambda next.js vercel

将我的 Vercel 托管应用程序升级到新的 MongoDB 驱动程序 (4.0) 时出现了如下偶发错误:

MongoServerError:游标 session ID([ session 哈希])与操作上下文的 session ID(无)不同

我按照 Vercel/Next 的建议摆弄了 MongoDB 缓存和连接脚本 https://github.com/vercel/next.js/blob/canary/examples/with-mongodb/lib/mongodb.js但问题仍然存在。

我不太清楚新驱动程序中可能引入此功能的更改是什么,但通过回滚到 3.6.10 已修复。

当从同一 Node.js 函数发出相同查询后超过 30 秒发出请求时,似乎会发生此问题。

我的数据库连接代码:

import { MongoClient } from "mongodb";

let uri = process.env.MONGODB_URI;
let dbName = process.env.MONGODB_DB;

let cached = global.mongo;

if (!cached) {
  cached = global.mongo = { conn: null, promise: null };
}

export async function connectToDatabase() {
  if (cached.conn) {
    return cached.conn;
  }

  if (!cached.promise) {
    const opts = {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    };

    cached.promise = MongoClient.connect(uri, opts).then((client) => {
      return {
        client,
        db: client.db(dbName),
      };
    });
  }
  cached.conn = await cached.promise;
  return cached.conn;
}

编辑: v4 Node.js 驱动程序中的这个错误是 fixed in 4.2.1

最佳答案

我在对大型集合使用 collection.find() 时遇到同样的错误,将其更改为 collection.find().limit(100) - 仅供引用。

关于node.js - MongoDB Node.js 驱动程序 4.0.0 : Cursor session id issues in production on Vercel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68607254/

相关文章:

node.js - 使用 Sails.js 0.10 配置 Bower

node.js - 'sudo npm install -g npm' 失败

mongodb - 有什么方法可以查看 Mongodb 文本索引中的所有索引术语?

mongodb - 将 kubectl exec 的返回值获取到 powershell 脚本中

python - PyMongo 添加电子邮件?

node.js - 如何在nodejs中等待异步函数完成执行

javascript - 需要了解为什么内联函数的 Promise 结果未解析为预期的返回结果

java - 根据 SQS 消息数量触发 Lambda

node.js - 如何调试 aws lambda 函数?

node.js - AWS lambda api 网关错误 "Malformed Lambda proxy response"