sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo-aggregation vs Java för loop och prestanda

Med aggregation exekveras hela frågan som en enda process på MongoDB-servern - applikationsprogrammet hämtar resultatmarkören från servern.

Med Java-program får du också en markör från databasservern som input till bearbetningen i applikationen. Svarsmarkören från servern kommer att vara en större uppsättning data och kommer att använda mer nätverksbandbredd. Och sedan finns det bearbetning i applikationsprogrammet, och detta lägger till fler steg för att slutföra frågan.

Jag tror att aggregeringsalternativet är ett bättre val - eftersom all bearbetning (den initiala matchningen och filtrering av arrayen) sker på databasservern som en enda process.

Notera också att stegen för aggregering av frågeställningar som du har lagt upp kan göras på ett effektivt sätt. Istället för flera steg (2, 3, 4 och 5) kan du göra dessa operationer i två steg - använd ett $project med $map på den yttre arrayen och sedan $filter på den inre arrayen och sedan $filter den yttre arrayen.

Sammanställningen:

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 ] }
              }
          }
      }
  },
] )


  1. Mongoose-fråga för att sortera huvuddokument och underdokument efter särskilt fält

  2. Mongoosepopulation vs aggregat

  3. mongodb grupp efter första tecken

  4. mongodb:hur filtrerar man bort de poster som skapades idag?