12

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 .

Majid Abdolhosseini
  • 2,191
  • 4
  • 31
  • 59

1 Answers1

16

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

mickl
  • 48,568
  • 9
  • 60
  • 89
  • Note that if you need to provide a hint for this query, this is possible only in MongoDB version 3.6 or later – Joe Jan 22 '20 at 13:59
  • 2
    To clarify, you might need to provide a hint, because otherwise mongo will probably not use an index, due to: https://jira.mongodb.org/browse/SERVER-30474 – Joe Jan 22 '20 at 14:21
  • Thank you @Joe for your comment – mickl Jan 22 '20 at 14:23