如何使用Nextjs连接到mongodb数据库?



试图连接到我的mongodb数据库在最新版本的Nextjs。事情变化太大了,我不知道该怎么办了。

这里有一个如何建立连接的示例:https://github.com/vercel/next.js/tree/canary/examples/with-mongodb

他们使用这个文件:

//The mongodb.js file from the example
import { MongoClient } from 'mongodb'
const uri = process.env.MONGODB_URI
const options = {}
let client
let clientPromise
if (!process.env.MONGODB_URI) {
throw new Error('Please add your Mongo URI to .env.local')
}
if (process.env.NODE_ENV === 'development') {
// In development mode, use a global variable so that the value
// is preserved across module reloads caused by HMR (Hot Module Replacement).
if (!global._mongoClientPromise) {
client = new MongoClient(uri, options)
global._mongoClientPromise = client.connect()
}
clientPromise = global._mongoClientPromise
} else {
// In production mode, it's best to not use a global variable.
client = new MongoClient(uri, options)
clientPromise = client.connect()
}
// Export a module-scoped MongoClient promise. By doing this in a
// separate module, the client can be shared across functions.
export default clientPromise

然而,他们忘了添加如何实际使用它。我甚至连想都没想明白。

//pages/api/user.js
import client from '/lib/mongodb.js'
export default async function handler(req, res) {
//How do I connect here?
}

还有两个附加问题:

  • 我以前在数据库连接上做缓存。它不再需要了吗?
  • utils文件夹怎么了?它曾经很特别,因为它不向客户发送任何东西。现在似乎每个人都在用lib,但我不认为它有什么特别之处?

你可以这样做:

const dbClient = await client;
const db = dbClient.db('db-name');
const collection = db.collection('collection-name');
// example to get a doc in collection
const doc = await collection.findOne({query:""}, {...options})