I have a mongodb data with a structure like as shown below
[{
category: "ABC",
sections: [
{
section_hod: "x111",
section_name: "SECTION A",
section_staff_count: "v11111",
section_id: "a1111",
:
},
{
section_hod: "x2222",
section_name: "SECTION B",
section_staff_count: "v2222",
section_id: "a2222",
:
}
]
}
:
:
]
I am using the below query for getting the total record counts and the records
db.getSiblingDB("departments").getCollection("DepartmentDetails")
.aggregate([
{ $unwind : "$sections"},
{ $match : { $and : [{ "sections.section_name" : "SECTION A"},
{ $or : [{ "category" : "ABC"}]}]}},
{
$project : {
"name" : "$sections.section_name",
"hod" : "$sections.section_hod",
"staff_count" : "$sections.section_staff_count",
"id" : "$sections.section_id"
}
},
{
$facet: {
metaData: [{
$count: 'total'
}],
records: [
{$skip: 0},
{$limit: 10}
]
}
}
]);
The above aggregation query is working fine but takes almost 10 seconds to return the results. I have total documents of 70K size in that collection. I have even indexed category
and sections.section_name
still it takes 6-10 seconds. I have noticed one key difference, which is when I put the $unwind
after $match
the results came super fast and took only 1-2 seconds…but the count was different.
Can someone please help me on this