Liquibase MongoDB Basic Commands Reference
This guide provides examples of commonly used Liquibase MongoDB changesets, including collection management, indexing, document operations, and custom run commands. For end-to-end guidance, see Generate MongoDB Changelog and MongoDB Changelog Example.
Collection Operations
Manage MongoDB collections with changesets.
Create Collection
- changeSet:
id: create-collection-1
author: devteam@company.com
changes:
- createCollection:
collectionName: users
Drop Collection
- changeSet:
id: drop-collection-1
author: devteam@company.com
changes:
- dropCollection:
collectionName: users
Index Operations
Define and manage indexes for optimized query performance.
Create Index
- changeSet:
id: create-index-1
author: devteam@company.com
changes:
- createIndex:
collectionName: users
keys: '{email: 1}'
options: '{unique: true, name: "idx_email_unique"}'
Drop Index
- changeSet:
id: drop-index-1
author: devteam@company.com
changes:
- dropIndex:
collectionName: users
keys: '{email: 1}'
Document Operations
Insert or manage documents directly in MongoDB collections.
Insert One Document
- changeSet:
id: insert-user-1
author: devteam@company.com
changes:
- insertOne:
collectionName: users
document: >
{
"name": "John Doe",
"email": "john@example.com",
"age": 30
}
Insert Many Documents
- changeSet:
id: insert-users-bulk
author: devteam@company.com
changes:
- insertMany:
collectionName: users
documents: >
[
{
"name": "Jane Smith",
"email": "jane@example.com",
"age": 25
},
{
"name": "Bob Johnson",
"email": "bob@example.com",
"age": 35
}
]
Generic Run Command
Execute raw MongoDB commands when no direct Liquibase abstraction exists.
Basic Run Command
- changeSet:
id: run-command-1
author: devteam@company.com
changes:
- runCommand:
command: >
{
"createIndexes": "users",
"indexes": [
{
"key": {"name": 1},
"name": "idx_name"
}
]
}
Run Command with Validation
- changeSet:
id: add-validation-schema
author: devteam@company.com
changes:
- runCommand:
command: >
{
"collMod": "users",
"validator": {
"$jsonSchema": {
"bsonType": "object",
"required": ["name", "email"],
"properties": {
"name": {"bsonType": "string"},
"email": {"bsonType": "string"}
}
}
}
}
Complete Example Changelog
A full example demonstrating collections, indexes, inserts, and schema validation.
databaseChangeLog:
- changeSet:
id: devteam:1
author: devteam@company.com
comment: Create users collection
changes:
- createCollection:
collectionName: users
- changeSet:
id: devteam:2
author: devteam@company.com
comment: Create indexes
changes:
- createIndex:
collectionName: users
keys: '{name: 1}'
options: '{name: "idx_name"}'
- createIndex:
collectionName: users
keys: '{email: 1}'
options: '{unique: true, name: "idx_email_unique"}'
- changeSet:
id: devteam:3
author: devteam@company.com
comment: Insert initial data
changes:
- insertOne:
collectionName: users
document: >
{
"name": "John Doe",
"age": 30,
"email": "john@example.com"
}
- changeSet:
id: devteam:4
author: devteam@company.com
comment: Add validation using runCommand
changes:
- runCommand:
command: >
{
"collMod": "users",
"validator": {
"$jsonSchema": {
"bsonType": "object",
"required": ["name", "email"],
"properties": {
"name": {"bsonType": "string"},
"email": {"bsonType": "string"}
}
}
}
}
Admin Command
Use adminCommand for database-level administrative operations such as retrieving server status, listing databases, or renaming collections. This change maps directly to the MongoDB db.adminCommand method and is backed by liquibase.ext.mongodb.change.AdminCommandChange.
Unlike runCommand, which executes in the current database context, db.adminCommand() always runs against the admin database, regardless of where it is invoked.
- changeSet:
id: admin-command-rename-collection
author: devteam@company.com
changes:
- adminCommand:
command: >
{
"renameCollection": "test.orders",
"to": "test.orders-2016"
}
Best Practices & Usage Notes
- Rollback Considerations - MongoDB operations like
insertOneandinsertManyare not automatically reversible. Always plan rollbacks explicitly e.g., by including a corresponding delete or drop changeset if needed. - Index Naming Conventions - Use clear, descriptive index names (
idx_email_unique,idx_name) to avoid collisions and simplify debugging. MongoDB auto-generates index names if not provided, which can make schema management inconsistent across environments. - Idempotency - Liquibase tracks applied changesets by ID and author. Re-running the same changelog will not re-apply changes, which makes migrations safer across multiple environments. Ensure your changeset IDs remain unique and descriptive.
- Environment-Specific Data - Avoid inserting environment-specific data (like test users or secrets) directly in production changelogs. Instead, use Liquibase contexts to conditionally run certain changesets.
- Use runCommand Wisely -
runCommandis powerful but bypasses Liquibase’s higher-level abstractions. It does not support automatic rollbacks (hence the RollbackImpossibleException).