MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongo агрегиране срещу Java за цикъл и производителност

С Aggregation цялата заявка се изпълнява като един процес на MongoDB сървъра - приложната програма ще получи курсора на резултатите от сървъра.

С програмата Java също получавате курсор от сървъра на базата данни като вход за обработката в приложението. Курсорът за отговор от сървъра ще бъде по-голям набор от данни и ще използва повече честотна лента на мрежата. След това има обработка в приложната програма и това добавя още стъпки за завършване на заявката.

Мисля, че опцията за агрегиране е по-добър избор - тъй като цялата обработка (първоначалното съвпадение и филтриране на масива) се случва на сървъра на базата данни като един процес.

Също така имайте предвид, че публикуваните от вас стъпки на заявка за агрегиране могат да бъдат направени по ефективен начин. Вместо няколко етапа (2, 3, 4 и 5), можете да извършите тези операции на два етапа - използвайте $project с $map върху външния масив и след това $filter върху вътрешния масив и след това $filter външния масив.

Агрегацията:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да наблюдавате вашите сървъри за бази данни с помощта на ClusterControl CLI

  2. Прочетете стойности на конкретни полета от MongodbC#

  3. Как да използвам типа интерфейс като модел в mgo (Go)?

  4. MongoDB:как да зададете ново поле, равно на стойността на друго поле, за всеки документ в колекция

  5. Обектите не са валидни като дъщерни данни на React от MongoDB