npx nuxi@latest module add nuxt-mongoose
Add nuxt-mongoose
to the modules
section of your nuxt.config.ts
file.
export default defineNuxtConfig({
modules: [
'nuxt-mongoose',
],
})
You can configure the module by adding a mongoose
section to your nuxt.config
file:
export default defineNuxtConfig({
mongoose: {
uri: 'process.env.MONGODB_URI',
options: {},
modelsDir: 'models',
},
})
By default, nuxt-mongoose
will auto-import your schemas from the models
directory in the server
directory. You can change this behavior by setting the modelsDir
option.
If you prefer to use the default configuration, skip adding the mongoose
section to your nuxt.config.ts
file. Simply provide your MongoDB connection URI in a .env
file like this:
MONGODB_URI="mongodb+srv://username:[email protected]/<database-name>?retryWrites=true&w=majority"
🔹 Replace
username
,password
, and<database name>
with your MongoDB credentials and database name.
That's it! The module will automatically use the MONGODB_URI
and default settings for your connection. No additional configuration is required.
For more details about connection options, check out the Mongoose documentation.
This function creates a new Mongoose connection. Example usage:
import { defineMongooseConnection } from '#nuxt/mongoose'
export const connection = defineMongooseConnection('mongodb://127.0.0.1/nuxt-mongoose')
This function creates a new Mongoose model with schema. Example usage:
import { defineMongooseModel } from '#nuxt/mongoose'
export const User = defineMongooseModel('User', {
name: {
type: String,
required: true,
},
})
or you could use it like:
export const User = defineMongooseModel({
name: 'User',
schema: {
name: {
type: String,
required: true,
},
},
})
If you need to connect to an existing collection in the database, you must specify the collection name using the options
field. Otherwise, Mongoose will create a new collection based on the model name.
import { defineMongooseModel } from '#nuxt/mongoose'
export const ProductSchema = defineMongooseModel({
name: 'Product',
schema: {
name: { type: String, required: true },
price: { type: Number, required: true },
stock: { type: Number, default: 0 },
},
options: {
collection: 'products_collection', // Ensure it uses the correct collection name
},
})
- Using the
options.collection
field ensures that the model interacts with the specified collection (products_collection
in the example above). - Without this option, a new collection will be created using the pluralized version of the model name (e.g.,
Products
).
For detailed configuration and usage instructions, please refer to our documentation.