How to dynamically build MongoDB query?

Dynamic MongoDB queries allow you to build query conditions programmatically based on runtime parameters. This is useful when query criteria depend on user input or application logic.

Syntax

function dynamicQuery(parameters) {
    var query = {};
    // Build query conditions based on parameters
    if (condition) {
        query["field"] = { "$operator": value };
    }
    return query;
}

Sample Data

db.dynamicQueryDemo.insertMany([
    { "Name": "John", "Subject": ["MongoDB", "MySQL"] },
    { "Name": "John", "Subject": ["C", "C++"] },
    { "Name": "John", "Subject": ["MongoDB", "Java"] }
]);
{
    "acknowledged": true,
    "insertedIds": [
        ObjectId("5cef5c5def71edecf6a1f69a"),
        ObjectId("5cef5c73ef71edecf6a1f69b"),
        ObjectId("5cef5c8bef71edecf6a1f69c")
    ]
}

Method 1: Dynamic Function with Conditional Logic

Create a function that builds different query operators based on input ?

function findDocument(subject) {
    var find = {};
    if (subject.length == 0)
        find["$nin"] = subject;
    else
        find["$in"] = subject;
    return find;
}

var sub = ["MySQL", "MongoDB"];
var myDoc = findDocument(sub);

db.dynamicQueryDemo.aggregate([{
    $match: {
        "Subject": myDoc
    }
}]);
{ "_id": ObjectId("5cef5c5def71edecf6a1f69a"), "Name": "John", "Subject": ["MongoDB", "MySQL"] }
{ "_id": ObjectId("5cef5c8bef71edecf6a1f69c"), "Name": "John", "Subject": ["MongoDB", "Java"] }

Method 2: Building Complex Dynamic Queries

Build queries with multiple dynamic conditions ?

function buildDynamicQuery(name, subjects, operation) {
    var query = {};
    
    if (name) {
        query.Name = name;
    }
    
    if (subjects && subjects.length > 0) {
        query.Subject = {};
        query.Subject[operation || "$in"] = subjects;
    }
    
    return query;
}

var dynamicQuery = buildDynamicQuery("John", ["MongoDB"], "$in");
db.dynamicQueryDemo.find(dynamicQuery);
{ "_id": ObjectId("5cef5c5def71edecf6a1f69a"), "Name": "John", "Subject": ["MongoDB", "MySQL"] }
{ "_id": ObjectId("5cef5c8bef71edecf6a1f69c"), "Name": "John", "Subject": ["MongoDB", "Java"] }

Key Points

  • Use conditional logic in functions to determine which query operators to apply.
  • Build query objects incrementally by adding fields based on available parameters.
  • Combine with $in, $nin, and other operators for flexible matching.

Conclusion

Dynamic MongoDB queries provide flexibility by constructing query conditions at runtime. Use JavaScript functions to build query objects based on input parameters and conditional logic for adaptable database operations.

Updated on: 2026-03-15T01:36:15+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements