Dans MongoDB, j'ai besoin de pouvoir dérouler un tableau imbriqué dans un document à l'intérieur d'un tableau à l'intérieur du document principal.
{
"_id" : ObjectId("5808d700536d1a3d69f4cf51"),
"last_name" : "Maity",
"xiith_mark" : 58,
"id" : "3539488",
"first_name" : "Harshavardhan",
"course_name" : "BE/B.Tech",
"institute_name_string" : "Abhayapuri College, P.O. Abhayapuri",
"profile_percentage" : 45,
"xiith_mark_type" : "Percentage",
"xth_mark_type" : "Percentage",
"date_of_birth" : "14-April-1993",
"xth_mark" : 30,
"last_login" : 1470827224,
"percentage" : 55,
"job_details" : [
{
"status" : NumberLong(6),
"applied_date" : NumberLong(1470831441),
"job_id" : NumberLong(92928),
"contact_viwed_status" : 0,
"label_name" : [
"shortlisted",
"rejected"
],
"questionnaire_status" : 0,
"batch_id" : NumberLong(6),
"call_letter" : NumberLong(812)
},
{
"status" : NumberLong(6),
"applied_date" : NumberLong(1470831441),
"job_id" : NumberLong(92928),
"contact_viwed_status" : 0,
"label_name" : [
"shortlisted",
"rejected"
],
"questionnaire_status" : 0,
"batch_id" : NumberLong(6),
"call_letter" : NumberLong(812)
}
],
"branch_name" : "Applied Electronics",
"candidate_state_name" : "West Bengal",
"candidate_city_name_string" : "Kolkata",
"10" : 10,
"12" : 12,
"skills" : "",
"gender" : "Male",
"fw_id" : "FW15884830",
"cgpa" : 0,
"picture_path" : "",
"hq_passout_year" : 2019
}
Sur la base de l'enregistrement ci-dessus, je dois compter les étiquettes de travail (job_details.label_name).
J'ai essayé la requête suivante:
db.response.aggregate(
{"$match":type_match},
{"$unwind": "$job_details" },
{"$group":
{
"_id":"$job_details.label_name",
"count": {"$sum": 1 }
}
}
])
La sortie est:
{
"count": 2,
"_id": [
"shortlisted",
"rejected"
]
}
Mais je veux que la sortie soit:
[
{
"count": 1,
"_id": "shortlisted"
},
{
"count": 1,
"_id": "rejected"
}
]
Comment puis-je obtenir cette sortie?
Dans l'étape dérouler , le champ doit être un champ de tableau. S'il ne s'agit pas d'un champ de tableau, il le traite comme un tableau de 1 élément.
Modifié dans la version 3.2: l'étape $ unwind n'a plus d'erreur sur les opérandes non-tableau. Si l'opérande ne se résout pas en un tableau mais n'est pas manquant, nul ou un tableau vide, $ unwind traite l'opérande comme un tableau à élément unique.
Répondez à votre question:
db.response.aggregate([
{
$project:
{
"job_details.label_name":1,
_id:0
}
},
{
$unwind:"$job_details.label_name"
},
{
$group:
{
_id:"$job_details.label_name",
count:{$sum:1}
}
}
])
Référer Shell Sortie