paulwong

          MONGODB SPRING DISTINCT

          SPRING 框架下 如果要做去重,在數據量大的時候會爆ERROR,可改用如下 寫法:

              private boolean needReorderCheck(String requestId) {
                  boolean result = false;
          //        try(MongoCursor<String> mongoCursor = 
          //                mongoTemplate.getCollection(mongoTemplate.getCollectionName(AccountNumProductLineIndex.class))
          //                             .distinct(KEY, Filters.eq(REQUEST_ID, requestId), String.class)
          //                             .iterator()
          //                )
                  try(MongoCursor<Document> mongoCursor = 
                          mongoTemplate.getCollection(mongoTemplate.getCollectionName(AccountNumProductLineIndex.class))
                                       .aggregate(
                                           Arrays.asList(
                                              Aggregates.project(
                                                              Projections.fields(
                                                                              Projections.excludeId(),
                                                                             Projections.include(KEY),
                                                                             Projections.include(REQUEST_ID)
                                                                          )
                                                         ),
                                              Aggregates.match(Filters.eq(REQUEST_ID, requestId)),
                                              Aggregates.group("$" + KEY)
                                           )
                                        )
                                       .allowDiskUse(true)
                                       .iterator();
                  )
                  {
                      String key = null;
                      boolean breakMe = false;
                      LOGGER.info("needReorderCheck.key --> start");
                      while(mongoCursor.hasNext()) {
                          if(breakMe) {
                              mongoCursor.close();
                              break;
                          }
                          Document keyDocument = mongoCursor.next();
                          key = keyDocument.getString("_id");
          //                key = mongoCursor.next().getString(KEY);
          //                LOGGER.info("needReorderCheck.keyDocument --> {}, key --> {}", keyDocument, key);
                          try(MongoCursor<Document> indexMongoCursor = 
                                  mongoTemplate.getCollection(AccountNumProductLineIndex.COLLECTION_NAME)
                                                  .find(Filters.and(Filters.eq(REQUEST_ID, requestId), Filters.eq(KEY, key)))
                                                  .iterator()
                          )
                          {
                              int preIndex = -1, currentIndex = -1;
                              Document preIndexDocument = null, currentIndexDocument;
                              while(indexMongoCursor.hasNext()) {
                                  currentIndexDocument = indexMongoCursor.next();
          //                        System.out.println(currentIndexDocument.toJson());
                                  if(preIndexDocument != null) {
                                       currentIndex = currentIndexDocument.getInteger(INDEX);
                                       preIndex = preIndexDocument.getInteger(INDEX);
                                       if(currentIndex - preIndex > 1) {
                                          indexMongoCursor.close();
                                          breakMe = true;
                                          result = true;
                                          break;
                                      }
                                  }
                                  preIndexDocument = currentIndexDocument;
                              }
                          }
                      }
                  }
                  
                  return result;
              }

          posted on 2022-10-18 10:22 paulwong 閱讀(208) 評論(0)  編輯  收藏 所屬分類: SPRINGMONGODBSPRING BOOT

          主站蜘蛛池模板: 锦州市| 徐闻县| 阳泉市| 普陀区| 通辽市| 揭阳市| 观塘区| 临泉县| 甘洛县| 花莲市| 西乌珠穆沁旗| 吐鲁番市| 光山县| 汤阴县| 光泽县| 云阳县| 灌阳县| 海丰县| 长泰县| 朝阳市| 阳曲县| 原平市| 南部县| 津市市| 武城县| 逊克县| 嘉善县| 开阳县| 芦溪县| 西安市| 梅河口市| 鹿泉市| 禹城市| 吴堡县| 红桥区| 濮阳市| 宣威市| 都江堰市| 元氏县| 互助| 密云县|