1

Как объединить эти 2 запросов в одно:Как объединить два агрегации запросов в один

Запрос 1

db.Response.aggregate([ 
    { 
     "$and": [ 
      { "job_details.owner_id" : 428 }, 
      { "job_details.owner_type" : 'searches' } 
     ] 
    }, 
    { 
     "$group": { 
      "_id": "$candidate_city_name_string", 
      "count": { "$sum": 1 } 
     } 
    } 
]) 

Запрос 2

db.Response.aggregate([ 
    { 
     "$and": [ 
      { "job_details.owner_id" : 428 }, 
      { "job_details.owner_type" : 'searches' } 
     ] 
    }, 
    { 
     "$group": { 
      "_id": "$skill", 
      "count": { "$sum": 1 } 
     } 
    } 
]) 

Результатом этот вопрос вроде этого выход 1:

{ 
    "result": [ 
     { _id: 'Bangalore', count: 8 }, 
     { _id: 'cochi', count: 9 } 
    ] 
    "ok":1 
} 

выход 2:

{ 
    "result": [ 
     { _id: 'java', count: 7 }, 
     { _id: 'python', count: 10 } 
    ], 
    "ok":1 
} 

Как я могу получить эти 2 результаты в одном запросе?

Мне нужен выход, как это:

Ожидаемый результат:

{ 
    "result": [ 
     "candidate_city_name_string": [ 
      { _id: 'Bangalore', count: 8 }, 
      { _id: 'cochi', count: 9 } 
     ], 
     "skill": [ 
      { _id: 'java', count: 7 }, 
      { _id: 'python', count: 10 } 
     ] 
    ], 
    "ok":1 
} 

Возможно ли это? Где-то я видел что-то около $facet, но я этого не понимал.

ответ

1
db.Response.aggregate([ 
{"$match":{"$and":[{"job_details.owner_id" : 482},{"job_details.owner_type" : 'searches'}]}}, 
{$facet: { 
    "candidate_sublocation_name_string": [ 
         {"$group": {"_id":"$candidate_sublocation_name_string","count": {"$sum": 1 }}} 
         ], 
    "skill": [ 
         {"$group": {"_id":"$skill","count": {"$sum": 1 }}} 
         ] 
     }}]) 
Смежные вопросы