Mongodb execute multiple queries in one round trip

mhndev picture mhndev · Oct 21, 2018 · Viewed 8k times · Source

Is there anything like elasticsearch Multi Search API ? the link is : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html.

consider I have multiple queries and I want to give these queries to mongo and get result in order .

Answer

mickl picture mickl · Oct 21, 2018

Yes, there is something similar in MongoDB. Using Aggregation Framework you can define multiple aggregation pipelines inside $facet stage.

Try:

db.col.save({a:1})
db.col.save({a:2})


db.col.aggregate([
    {
        $facet: {
            query1: [ { $match: { a:1 } }, { $project: { _id: 0 } } ],
            query2: [ { $match: { a:2 } }, { $project: { _id: 0 } } ],
        }
    }
])

which prints:

{ "query1" : [ { "a" : 1 } ], "query2" : [ { "a" : 2 } ] }

Using $facet you have to keep in mind that single BSON document can't exceed 16 MB size. More about aggregation limitations here