Warning
π§ This package is in active development and may contain breaking changes. While it contains 100+ tests to ensure reliability, I recommend using it in production with caution. The documentation may not be up-to-date and can have inconsistent information. Thanks for your understanding!
Leverage the power of objects in Node.js with MongoDB's object-oriented database and AdonisJS 6's Lucid ORM. Built specifically for AdonisJS 6,
mongo-adonissupports latest MongoDB versions.
- π Seamless MongoDB Integration: Use MongoDB with the familiar Lucid ORM API
- π― TypeScript First: Full type safety and autocompletion
- π Active Record Pattern: Intuitive model-based database operations
- π Rich Relationships: Support for HasOne, HasMany, BelongsTo relationships
- π¨ Decorator Support: Clean and declarative model definitions
- π Powerful Query Builder: Fluent API for complex queries
- π§ Direct MongoDB Access: Use MongoDB's native API directly with
db.collection.find({}) - π Built-in Auth Support: Works seamlessly with AdonisJS 6 auth
- π Advanced Serialization: Fine-grained control over JSON representation
- π¦ Zero Configuration: Get started with minimal setup
- Create boilerplate
- Improve query builder
- Many-to-Many relationships
- Paginate methods
- ? Migrations
- ? Factories
- ? Seeds
bun install mongo-adonisnode ace configure mongo-adonisMONGODB_CONNECTION=mongodb
MONGODB_CONNECTION_STRING=mongodb://localhost:27017/mongo-adonis
MONGODB_HOST=127.0.0.1
MONGODB_PORT=27017
MONGODB_USER=
MONGODB_PASSWORD=
MONGODB_DATABASE=mongo-adonis
MONGODB_AUTH_SOURCE=adminimport { MongoModel, column, ObjectId } from 'mongo-adonis'
export class Post extends MongoModel {
@column({ isPrimary: true })
declare _id: ObjectId
@column()
declare name: string
@column()
declare description: string
@column()
declare content: string
}// Create
const user = await User.create({
name: 'John Doe',
email: 'john@example.com',
password: 'secret'
})
// Read
const user = await User.find('60a1e2c3d4e5f6a7b8c9d0e1')
const users = await User.all()
// Update
user.name = 'Jane Doe'
await user.save()
// Delete
await user.delete()// Complex queries with the fluent API
const activeUsers = await User.query()
.where('status', 'active')
.where('age', '>=', 18)
.orderBy('name', 'asc')
.limit(10)
.offset(0)
.all()import { column, hasMany, belongsTo, ObjectId, MongoModel } from 'mongo-adonis'
export class User extends MongoModel {
@column({ isPrimary: true })
declare _id: ObjectId
@column()
declare name: string
@hasMany(() => Post)
declare posts: HasMany<typeof Post>
}
export class Post extends MongoModel {
@column({ isPrimary: true })
declare _id: ObjectId
@column()
declare title: string
@belongsTo(() => User)
declare user: BelongsTo<typeof User>
}// Create a user with posts
const user = await User.create({
name: 'John Doe',
email: 'john@example.com'
})
// Create posts for the user
await user.posts.create({
title: 'First Post',
content: 'Hello World!'
})
await user.posts.createMany([
{
title: 'Second Post',
content: 'Another post',
},
{
title: 'Third Post',
content: 'Another one',
}
])
// Load user with their posts
const userWithPosts = await User.query().where('_id', user._id).first()
// Get all posts for a user
const userPosts = await user.posts.all()
// Find a post and load its user
const post = await Post.query().where('_id', postId).first()
// Get the user of a post
const postUser = await post.user.exec()
// Update a post's user
const newUser = await User.find(newUserId)
await post.user.associate(newUser)
// Remove a post from a user
await post.user.dissociate()Works seamlessly with AdonisJS 6 auth, update the app/models/user.ts file:
import { DateTime } from 'luxon'
import hash from '@adonisjs/core/services/hash'
import { compose } from '@adonisjs/core/helpers'
import { MongoModel, column, withAuthFinder, ObjectId } from 'mongo-adonis'
const AuthFinder = withAuthFinder(() => hash.use('scrypt'), {
uids: ['email'],
passwordColumnName: 'password',
})
export default class User extends compose(MongoModel, AuthFinder) {
@column({ isPrimary: true })
declare _id: ObjectId
@column()
declare email: string
@column({ serialize: false })
declare password: string
@column.dateTime({ autoCreate: true })
declare createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
declare updatedAt: DateTime
}Please see our Contributing Guide for details.
MIT License - see the LICENSE.md file for details.