This codemod updates synchronous MongoDB operations in a Meteor project to use their asynchronous counterparts, making the code compatible with modern JavaScript best practices (using async/await). It transforms methods such as find, findOne, insert, update, remove, and upsert to their asynchronous equivalents by appending Async to method names and introducing await.
Example
This codemod converts synchronous MongoDB queries and updates into asynchronous methods for better code readability, performance, and error handling.
Before
const docs = MyCollection.find({ _id: "123" }).fetch();const doc = MyCollection.findOne({ _id: "123" });
After
const docs = await MyCollection.find({ _id: "123" }).fetchAsync();const doc = await MyCollection.findOneAsync({ _id: "123" });
Transformations
This codemod handles various MongoDB operations and converts them into asynchronous functions.
Example 1: Fetching documents
Before:
const docs = MyCollection.find({ _id: "123" }).fetch();
After:
const docs = await MyCollection.find({ _id: "123" }).fetchAsync();
Example 2: Fetching a single document
Before:
const doc = MyCollection.findOne({ _id: "123" });
After:
const doc = await MyCollection.findOneAsync({ _id: "123" });
Example 3: Updating documents
Before:
MyCollection.update({ _id: "123" }, { $set: { name: "John" } });const updatedDocument = MyCollection.findOne({ _id: "123" });
After:
await MyCollection.updateAsync({ _id: "123" }, { $set: { name: "John" } });const updatedDocument = await MyCollection.findOneAsync({ _id: "123" });
Example 4: Inserting, updating, removing, and upserting documents
Before:
MyCollection.insert({ name: "Jane", age: 30 });MyCollection.update({ _id: "123" }, { $set: { name: "John" } });MyCollection.remove({ _id: "123" });MyCollection.upsert({ _id: "123" }, { $set: { name: "John" } });
After:
await MyCollection.insertAsync({ name: "Jane", age: 30 });await MyCollection.updateAsync({ _id: "123" }, { $set: { name: "John" } });await MyCollection.removeAsync({ _id: "123" });await MyCollection.upsertAsync({ _id: "123" }, { $set: { name: "John" } });
This codemod simplifies migration from synchronous MongoDB methods to their asynchronous versions, improving performance and allowing better control over the code execution flow.
Build custom codemods
Use AI-powered codemod studio and automate undifferentiated tasks for yourself, colleagues or the community