Q1. How would you structure a CLI task manager using MongoDB?
A task manager CLI would have commands like add, list, complete, delete. Use Mongoose for schema: task has title, description, status (pending/completed), createdAt. Connect to MongoDB at startup. Store tasks in a 'tasks' collection. Use yargs or commander for CLI parsing.
Q2. How do you add a new task from CLI?
Parse arguments and use Mongoose model:
const Task = require('./models/Task');
async function addTask(title, description) {
try {
const task = new Task({ title, description });
await task.save();
console.log('Task added with id:', task._id);
} catch (err) {
console.error('Error:', err.message);
}
}
Q3. How do you list tasks with filtering?
Accept flags for status (--pending, --completed). Use Mongoose queries:
const filter = {};
if (argv.pending) filter.status = 'pending';
if (argv.completed) filter.status = 'completed';
const tasks = await Task.find(filter).sort({ createdAt: -1 });
console.table(tasks.map(t => t.toObject()));
Q4. How do you mark a task as complete?
Use findByIdAndUpdate:
async function completeTask(id) {
const task = await Task.findByIdAndUpdate(
id,
{ status: 'completed' },
{ new: true }
);
if (task) console.log('Task completed:', task.title);
else console.log('Task not found');
}
Q5. How do you handle database connection in a CLI app?
Connect once at the beginning of the script:
require('./db'); // connect mongoose
// after all commands, close connection
process.on('exit', () => mongoose.connection.close());
Use a separate db.js to export connection promise.