Hi to all,
on a standalone server of MongoDB 4.2
i have a collection with 23 Millions of document like this
{
"_id": "644932e30ce7a25b142bca1c",
"data": {
"Assistenza": {
"Eventi": {
"Erogazione": [
{
"TipoOperatore": "8",
"data": "1672963200000",
"Prestazioni": [
{
"TipoPrestazione": 3,
"numPrestazione": 1
}
]
}
],
"PresaInCarico": {
"Id_Rec": "1902092023-01-05CF_0000000000001",
"data": "1672876800000"
}
},
"Erogatore": {
"CodiceRegione": "190",
"CodiceASL": "209"
},
"Trasmissione": {
"tipo": "I"
}
}
},
"idFlusso": "644932cf0ce7a25b142bc632",
"idTracciato": "574",
"idUtente": "2",
"dataCreazione": "2023-04-26T14:18:30.495Z",
"jobId": "18221",
"stato": "VERSIONED",
"metadata": {
"nomeFile": "SIAD_APS_600000_I.xml",
"periodoRiferimento": "01",
"annoRiferimento": "2023",
"idRegione": "33",
"valoreRegione": "190",
"periodoRiferimentoInTrimestre": "1",
"periodoRiferimentoInSemestre": "1",
"periodoRiferimentoInAnno": "1",
"Assistenza_Eventi_PresaInCarico_Id_Rec_encrypted": "",
"idAzienda": "485",
"valoreAzienda": "190209"
},
"key": {
"Assistenza-Erogatore-CodiceASL": "209",
"Assistenza-Erogatore-CodiceRegione": "190",
"Assistenza-Eventi-Erogazione[0]-TipoOperatore": "8",
"Assistenza-Eventi-Erogazione[0]-data": "1672963200000",
"Assistenza-Eventi-PresaInCarico-Id_Rec": "1902092023-01-05CF_0000000000001",
"Assistenza-Eventi-PresaInCarico-data": "1672876800000",
"stato": "VERSIONED"
},
"progressivo": "2",
"flagVersioneMassima": true,
"progressivoMassimo": "2",
"sessioniControllo": [
{
"jobId": "18453",
"idUtente": "2",
"dataElaborazioneControllo": "2023-05-25T09:10:31.331Z",
"errori": [
{
"_id": "646f27193a95004ca8858aac",
"idUtente": "2",
"dataElaborazioneControllo": "2023-05-25T09:10:31.331Z",
"risultatoOperazione": [
{
"idControllo": "4613",
"codControllo": "FAKE1",
"descControllo": "FAKE1",
"idErrore": "6603",
"codErrore": "ANOMALIA",
"descErrore": "Anomalia",
"ambitoErrore": "A",
"gravitaErrore": "LIEVE",
"riferimentoErrore": "CAMPO",
"tipoErrore": "ANOMALIA",
"idCampo": "44426"
}
]
},
{
"_id": "646f28e53a95004ca88eb26e",
"idUtente": "2",
"dataElaborazioneControllo": "2023-05-25T09:10:31.331Z",
"risultatoOperazione": [
{
"idControllo": "4620",
"codControllo": "FAKE2",
"descControllo": "FAKE2",
"idErrore": "6603",
"codErrore": "ANOMALIA",
"descErrore": "Anomalia",
"ambitoErrore": "A",
"gravitaErrore": "LIEVE",
"riferimentoErrore": "CAMPO",
"tipoErrore": "ANOMALIA",
"idCampo": "44426"
}
]
},
{
"_id": "646f2aa93a95004ca897da2e",
"idUtente": "2",
"dataElaborazioneControllo": "2023-05-25T09:10:31.331Z",
"risultatoOperazione": [
{
"idControllo": "4621",
"codControllo": "FAKE3",
"descControllo": "FAKE3",
"idErrore": "6603",
"codErrore": "ANOMALIA",
"descErrore": "Anomalia",
"ambitoErrore": "A",
"gravitaErrore": "LIEVE",
"riferimentoErrore": "CAMPO",
"tipoErrore": "ANOMALIA",
"idCampo": "44426"
}
]
}
]
},
{
"jobId": "18455",
"idUtente": "2",
"dataElaborazioneControllo": "2023-05-25T13:21:31.870Z"
}
]
}
and execute aggregation
db.flussi_dettagli.aggregate(
[
{
"$match" : {
"idTracciato" : Long("574")
}
},
{
"$match" : {
"sessioniControllo.jobId" : Long("18453")
}
},
{
"$unwind" : {
"path" : "$sessioniControllo",
"preserveNullAndEmptyArrays" : false
}
},
{
"$match" : {
"sessioniControllo.jobId" : Long("18453")
}
},
{
"$unwind" : {
"path" : "$sessioniControllo.errori",
"preserveNullAndEmptyArrays" : false
}
},
{
"$unwind" : {
"path" : "$sessioniControllo.errori.risultatoOperazione",
"preserveNullAndEmptyArrays" : false
}
},
{
"$count" : "count"
}
]
)
the first match on sessioniControllo.jobId is for force mongo to use index that i have on {idTracciato:1,sessioniControllo.jobId: 1}
the count ran in about 17 sec.
below the explain:
{
"stages" : [
{
"$cursor" : {
"query" : {
"$and" : [
{
"idTracciato" : 574
},
{
"sessioniControllo.jobId" : 18453
}
]
},
"fields" : {
"sessioniControllo" : 1,
"_id" : 0
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "siact.flussi_dettagli",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"idTracciato" : {
"$eq" : 574
}
},
{
"sessioniControllo.jobId" : {
"$eq" : 18453
}
}
]
},
"queryHash" : "6E14D4E2",
"planCacheKey" : "1F663360",
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1,
"sessioniControllo.jobId" : 1
},
"indexName" : "idx_idTracciato_sessioneControllo",
"isMultiKey" : true,
"multiKeyPaths" : {
"idTracciato" : [ ],
"sessioniControllo.jobId" : [ "sessioniControllo" ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"sessioniControllo.jobId" : [ "[18453, 18453]" ]
}
}
},
"rejectedPlans" : [
{
"stage" : "FETCH",
"filter" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1,
"stato" : 1,
"data.informazioniRicovero.codiceIstitutoDiCura" : 1,
"data.informazioniRicovero.progressivoSDO" : 1
},
"indexName" : "idx_discard_no_encrypted_573_572",
"isMultiKey" : false,
"multiKeyPaths" : {
"idTracciato" : [ ],
"stato" : [ ],
"data.informazioniRicovero.codiceIstitutoDiCura" : [ ],
"data.informazioniRicovero.progressivoSDO" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"stato" : [ "[MinKey, MaxKey]" ],
"data.informazioniRicovero.codiceIstitutoDiCura" : [ "[MinKey, MaxKey]" ],
"data.informazioniRicovero.progressivoSDO" : [ "[MinKey, MaxKey]" ]
}
}
},
{
"stage" : "FETCH",
"filter" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1,
"dataCreazione" : 1,
"stato" : 1,
"flagVersioneMassima" : 1
},
"indexName" : "idx_max_version_with_data",
"isMultiKey" : false,
"multiKeyPaths" : {
"idTracciato" : [ ],
"dataCreazione" : [ ],
"stato" : [ ],
"flagVersioneMassima" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"dataCreazione" : [ "[MinKey, MaxKey]" ],
"stato" : [ "[MinKey, MaxKey]" ],
"flagVersioneMassima" : [ "[MinKey, MaxKey]" ]
}
}
},
{
"stage" : "FETCH",
"filter" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1
},
"indexName" : "idTracciato_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"idTracciato" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ]
}
}
},
{
"stage" : "FETCH",
"filter" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1,
"stato" : 1,
"data.FlsResSemires_2.PrestazioniSR.tempoParziale" : 1,
"data.FlsResSemires_2.Chiave.tipoPrestazione" : 1,
"data.FlsResSemires_2.Chiave.Data" : 1,
"data.FlsResSemires_2.Chiave.Erogatore.CodiceStruttura" : 1,
"data.FlsResSemires_2.Chiave.Erogatore.CodiceASL" : 1,
"data.CodiceRegione" : 1,
"metadata.FlsResSemires_2_Chiave_ID_REC_encrypted" : 1,
"data.FlsResSemires_2.Dimissione.Data" : 1,
"data.FlsResSemires_2.PrestazioniSR.tempoPieno" : 1
},
"indexName" : "idx_discard_encrypted_567_566",
"isMultiKey" : false,
"multiKeyPaths" : {
"idTracciato" : [ ],
"stato" : [ ],
"data.FlsResSemires_2.PrestazioniSR.tempoParziale" : [ ],
"data.FlsResSemires_2.Chiave.tipoPrestazione" : [ ],
"data.FlsResSemires_2.Chiave.Data" : [ ],
"data.FlsResSemires_2.Chiave.Erogatore.CodiceStruttura" : [ ],
"data.FlsResSemires_2.Chiave.Erogatore.CodiceASL" : [ ],
"data.CodiceRegione" : [ ],
"metadata.FlsResSemires_2_Chiave_ID_REC_encrypted" : [ ],
"data.FlsResSemires_2.Dimissione.Data" : [ ],
"data.FlsResSemires_2.PrestazioniSR.tempoPieno" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"stato" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.PrestazioniSR.tempoParziale" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.Chiave.tipoPrestazione" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.Chiave.Data" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.Chiave.Erogatore.CodiceStruttura" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.Chiave.Erogatore.CodiceASL" : [ "[MinKey, MaxKey]" ],
"data.CodiceRegione" : [ "[MinKey, MaxKey]" ],
"metadata.FlsResSemires_2_Chiave_ID_REC_encrypted" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.Dimissione.Data" : [ "[MinKey, MaxKey]" ],
"data.FlsResSemires_2.PrestazioniSR.tempoPieno" : [ "[MinKey, MaxKey]" ]
}
}
},
{
"stage" : "FETCH",
"filter" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1,
"stato" : 1,
"flagVersioneMassima" : 1
},
"indexName" : "idx_max_version",
"isMultiKey" : false,
"multiKeyPaths" : {
"idTracciato" : [ ],
"stato" : [ ],
"flagVersioneMassima" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"stato" : [ "[MinKey, MaxKey]" ],
"flagVersioneMassima" : [ "[MinKey, MaxKey]" ]
}
}
},
{
"stage" : "FETCH",
"filter" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"idTracciato" : 1,
"stato" : 1
},
"indexName" : "idTracciato_1_stato_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"idTracciato" : [ ],
"stato" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"stato" : [ "[MinKey, MaxKey]" ]
}
}
}
]
},
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 600000,
"executionTimeMillis" : 14552,
"totalKeysExamined" : 600000,
"totalDocsExamined" : 600000,
"executionStages" : {
"stage" : "FETCH",
"nReturned" : 600000,
"executionTimeMillisEstimate" : 408,
"works" : 600001,
"advanced" : 600000,
"needTime" : 0,
"needYield" : 0,
"saveState" : 5572,
"restoreState" : 5572,
"isEOF" : 1,
"docsExamined" : 600000,
"alreadyHasObj" : 0,
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 600000,
"executionTimeMillisEstimate" : 115,
"works" : 600001,
"advanced" : 600000,
"needTime" : 0,
"needYield" : 0,
"saveState" : 5572,
"restoreState" : 5572,
"isEOF" : 1,
"keyPattern" : {
"idTracciato" : 1,
"sessioniControllo.jobId" : 1
},
"indexName" : "idx_idTracciato_sessioneControllo",
"isMultiKey" : true,
"multiKeyPaths" : {
"idTracciato" : [ ],
"sessioniControllo.jobId" : [ "sessioniControllo" ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"idTracciato" : [ "[574, 574]" ],
"sessioniControllo.jobId" : [ "[18453, 18453]" ]
},
"keysExamined" : 600000,
"seeks" : 1,
"dupsTested" : 600000,
"dupsDropped" : 0,
"indexDef" : {
"indexName" : "idx_idTracciato_sessioneControllo",
"isMultiKey" : true,
"multiKeyPaths" : {
"idTracciato" : [ ],
"sessioniControllo.jobId" : [ "sessioniControllo" ]
},
"keyPattern" : {
"idTracciato" : 1,
"sessioniControllo.jobId" : 1
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"direction" : "forward"
}
}
}
}
}
},
{
"$unwind" : {
"path" : "$sessioniControllo"
}
},
{
"$match" : {
"sessioniControllo.jobId" : {
"$eq" : 18453
}
}
},
{
"$unwind" : {
"path" : "$sessioniControllo.errori"
}
},
{
"$unwind" : {
"path" : "$sessioniControllo.errori.risultatoOperazione"
}
},
{
"$group" : {
"_id" : {
"$const" : null
},
"count" : {
"$sum" : {
"$const" : 1
}
}
}
},
{
"$project" : {
"_id" : false,
"count" : true
}
}
],
"ok" : 1
}