Grupo MongoDB con ID múltiple

Tengo un conjunto de documentos con más de 20 claves en cada uno de ellos, y las claves varían con los documentos. Algunas claves pueden no estar presentes en todos los documentos. Estoy tratando de ejecutar una operación de grupo MongoDB utilizando el marco de agregación. La consulta se ve algo como esto:

db.collection.aggregate([{'$group': {'count': {'$sum': 1}, '_id': {'location': '$location', 'type': '$type', 'language': '$language'}}}]) 

En el caso ideal, debería devolver los documentos donde 3 de las claves deberían estar presentes y realizar una operación “agrupar por” en ellas. Pero el resultado es algo así:

 { "result" : [ { "_id" : { "location" : "abc", "type" : "456" }, "count" : 5 }, { "_id" : { "type" : "123", "language" : "english" }, "count" : 1 }, { "_id" : { "location" : "ghi", "type" : "9876", "language" : "latin" }, "count" : 2 }, { "_id" : { "language" : "hebrew", "type" : "9434" }, "count" : 3 }, { "_id" : { "type" : "525", "location" : "cari" }, "count" : 1 }, { "_id" : { "language" : "spanish", "location" : "dff" }, "count" : 12 }, { "_id" : { "location" : "adpj", "type" : "3463", "language": "english" }, "count" : 8 }, { "_id" : { "language" : "french", "location" : "nts" }, "count" : 6 } ], "ok" : 1 } 

El problema es que MongoDB realiza la operación de grupo incluso cuando no encuentra las 3 claves que solicité en la consulta y muestra el grupo parcial. Solo me interesan los resultados donde obtengo todas las claves. Filtrar en el lado del cliente no es una opción. ¿Alguien puede ayudar?

Consulta:

 db.collection.aggregate([ { $match: { "type" : { "$exists" : true}, "location" : { "$exists" : true}, "language" : { "$exists" : true}} } ]) 

Para $ group-operator de MongoDB, ningún valor es también un valor.

Cuando desee excluir cualquier documento donde no estén presentes las tres claves, puede agregar un paso de $ coincidencia a su canal de agregación que filtra cualquier documento que no tenga todas estas claves.

  db.collection.aggregate([ { $match: { "type" : { "$exists" : true}, "location" : { "$exists" : true}, "language" : { "$exists" : true} } }, { $group: { "_id": { "location": "$location", "type": "$typ", "language": "$language" }, "count": {$sum: 1} } } ]);