Med aggregation udføres hele forespørgslen som en enkelt proces på MongoDB-serveren - applikationsprogrammet henter resultatmarkøren fra serveren.
Med Java-program får du også en markør fra databaseserveren som input til behandlingen i applikationen. Svarmarkøren fra serveren vil være et større sæt data og vil bruge mere netværksbåndbredde. Og så er der behandling i ansøgningsprogrammet, og dette tilføjer flere trin til at fuldføre forespørgslen.
Jeg tror, at aggregeringsmuligheden er et bedre valg - da al behandling (den indledende match og filtrering af arrayet) sker på databaseserveren som en enkelt proces.
Bemærk også, at de aggregeringsforespørgselstrin, du havde sendt, kan udføres på en effektiv måde. I stedet for flere trin (2, 3, 4 og 5) kan du udføre disse operationer i to trin - brug et $project
med $map
på det ydre array og derefter $filter
på det indre array og derefter $filter
det ydre array.
Sammenlægningen:
db.test.aggregate( [
{
$addFields: {
Field2: {
$map: {
input: "$Field2",
as: "fld2",
in: {
Field3: "$$fld2.Field3",
Field4: {
$filter: {
input: "$$fld2.Field4",
as: "fld4",
cond: { $eq: [ "$$fld4.id", "123" ] }
}
}
}
}
}
}
},
{
$addFields: {
Field2: {
$filter: {
input: "$Field2",
as: "f2",
cond: { $gt: [ { $size: "$$f2.Field4" }, 0 ] }
}
}
}
},
] )