{"id":7248,"date":"2022-09-03T09:04:10","date_gmt":"2022-09-03T01:04:10","guid":{"rendered":"http:\/\/123.57.164.21\/?p=7248"},"modified":"2022-09-03T09:04:10","modified_gmt":"2022-09-03T01:04:10","slug":"springboot%e6%95%b4%e5%90%88mongodb","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=7248","title":{"rendered":"SpringBoot\u6574\u5408mongodb"},"content":{"rendered":"\n<p><strong>\u4e00. \u6982\u8ff0<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>\u53c2\u8003\u5f00\u6e90\u9879\u76ee<a rel=\"noreferrer noopener\" href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fgithub.com%2Fxkcoding%2Fspring-boot-demo\" target=\"_blank\">https:\/\/github.com\/xkcoding\/spring-boot-demo<\/a><br>\u6b64Demo\u7b80\u5355\u96c6\u6210mongodb,\u4f7f\u7528\u5b98\u65b9\u7684 starter \u5b9e\u73b0\u589e\u5220\u6539\u67e5\u3002<\/p>\n\n\n\n<p><strong>\u4e8c. \u5b89\u88c5mongodb<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><strong>\u4e09. SpringBoot\u5de5\u7a0b<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>3.1 \u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">        &lt;dependency>\n            &lt;groupId>org.springframework.boot&lt;\/groupId>\n            &lt;artifactId>spring-boot-starter&lt;\/artifactId>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>org.springframework.boot&lt;\/groupId>\n            &lt;artifactId>spring-boot-starter-data-mongodb&lt;\/artifactId>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>org.springframework.boot&lt;\/groupId>\n            &lt;artifactId>spring-boot-starter-test&lt;\/artifactId>\n            &lt;scope>test&lt;\/scope>\n        &lt;\/dependency>\n\n        &lt;dependency>\n            &lt;groupId>cn.hutool&lt;\/groupId>\n            &lt;artifactId>hutool-all&lt;\/artifactId>\n        &lt;\/dependency>\n<\/pre>\n\n\n\n<p>3.2 application.yml<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">spring:\n  data:\n    mongodb:\n      host: localhost\n      port: 27017\n      database: monge_demo\nlogging:\n  level:\n    org.springframework.data.mongodb.core: debug\n<\/pre>\n\n\n\n<p>3.3 \u542f\u52a8\u7c7b<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@SpringBootApplication\npublic class SpringBootDemoMongodbApplication {\n    public static void main(String[] args) {\n        SpringApplication.run(SpringBootDemoMongodbApplication.class, args);\n    }\n}\n<\/pre>\n\n\n\n<p>3.4 \u5b9e\u4f53\u7c7b: Article.java<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Document(collection = \"UserInfo\")\n@Data\n@Builder\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Article {\n    \/**\n     * \u6587\u7ae0id\n     *\/\n    @Id\n    private Long id;\n\n    \/**\n     * \u7528\u6237ID\n     *\/\n    private Long userId;\n\n    \/**\n     * \u6587\u7ae0\u6807\u9898\n     *\/\n    private String title;\n\n    \/**\n     * \u6587\u7ae0\u5185\u5bb9\n     *\/\n    private String content;\n\n    \/**\n     * \u521b\u5efa\u65f6\u95f4\n     *\/\n    private Date createTime;\n\n    \/**\n     * \u66f4\u65b0\u65f6\u95f4\n     *\/\n    private Date updateTime;\n\n    \/**\n     * \u70b9\u8d5e\u6570\u91cf\n     *\/\n    private Long thumbUp;\n\n    \/**\n     * \u8bbf\u5ba2\u6570\u91cf\n     *\/\n    private Long visits;\n\n}\n<\/pre>\n\n\n\n<p>3.5 \u6301\u4e45\u5c42: ArticleRepository.java<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public interface ArticleRepository extends MongoRepository&lt;Article, Long> {\n    \/**\n     * \u6839\u636e\u6807\u9898\u6a21\u7cca\u67e5\u8be2\n     *\n     * @param title \u6807\u9898\n     * @return \u6ee1\u8db3\u6761\u4ef6\u7684\u6587\u7ae0\u5217\u8868\n     *\/\n    List&lt;Article> findByTitleLike(String title);\n}\n<\/pre>\n\n\n\n<p>\u6ce8: \u53ef\u4ee5\u901a\u8fc7\u5173\u952e\u5b57\u58f0\u660e\u65b9\u6cd5, \u4e0d\u7528\u5199\u5b9e\u73b0<br>\u4e0b\u6807\u6e90\u4e8e\u6587\u7ae0<a rel=\"noreferrer noopener\" href=\"https:\/\/links.jianshu.com\/go?to=https%3A%2F%2Fblog.csdn.net%2Fliuchunlei%2Farticle%2Fdetails%2F107411636\" target=\"_blank\">MongoRepository\u7684\u751f\u6210\u89c4\u5219<\/a><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/123.57.164.21\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-1024x849.png\" alt=\"\" class=\"wp-image-7249\" width=\"621\" height=\"515\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-1024x849.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-300x249.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-768x637.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-830x688.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-230x191.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-350x290.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6-480x398.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-6.png 1180w\" sizes=\"(max-width: 621px) 100vw, 621px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/123.57.164.21\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-1024x975.png\" alt=\"\" class=\"wp-image-7250\" width=\"630\" height=\"599\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-1024x975.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-300x286.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-768x732.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-830x791.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-230x219.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-350x333.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7-480x457.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2022\/09\/\u56fe\u7247-7.png 1182w\" sizes=\"(max-width: 630px) 100vw, 630px\" \/><\/figure><\/div>\n\n\n\n<p>3.6 \u7b80\u5355\u7684CURD<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Slf4j\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class ArticleRepositoryTest {\n    @Autowired\n    private ArticleRepository articleRepo;\n\n    @Autowired\n    private MongoTemplate mongoTemplate;\n\n    private static Snowflake snowflake = IdUtil.createSnowflake(1, 1);\n\n\n    \/**\n     * \u6d4b\u8bd5\u65b0\u589e\n     *\/\n    @Test\n    public void testSave() {\n        Article article = new Article(1L, RandomUtil.randomString(20), RandomUtil.randomString(150), DateUtil.date(), DateUtil.date(), 0L, 0L);\n        articleRepo.save(article);\n        \/\/ \u66f4\u5177ID\u5c5e\u6027\u8fdb\u884c\u65b0\u589e\u6216\u66f4\u65b0\n        mongoTemplate.save(article);\n        log.info(\"\u3010article\u3011= {}\", JSONUtil.toJsonStr(article));\n    }\n\n    \/**\n     * \u6d4b\u8bd5\u6279\u91cf\u65b0\u589e\u5217\u8868\n     *\/\n    @Test\n    public void testSaveList() {\n        List&lt;Article> articles = Lists.newArrayList();\n        for (int i = 0; i &lt; 10; i++) {\n            articles.add(new Article(snowflake.nextId(), RandomUtil.randomString(20), RandomUtil.randomString(150), DateUtil.date(), DateUtil.date(), 0L, 0L));\n        }\n        articleRepo.saveAll(articles);\n\n        log.info(\"\u3010articles\u3011= {}\", JSONUtil.toJsonStr(articles.stream().map(Article::getId).collect(Collectors.toList())));\n    }\n\n    \/**\n     * \u6d4b\u8bd5\u66f4\u65b0\n     *\/\n    @Test\n    public void testUpdate() {\n        articleRepo.findById(1L).ifPresent(article -> {\n            article.setTitle(article.getTitle() + \"\u66f4\u65b0\u4e4b\u540e\u7684\u6807\u9898\");\n            article.setUpdateTime(DateUtil.date());\n            articleRepo.save(article);\n            log.info(\"\u3010article\u3011= {}\", JSONUtil.toJsonStr(article));\n        });\n    }\n\n    \/**\n     * \u6d4b\u8bd5\u5220\u9664\n     *\/\n    @Test\n    public void testDelete() {\n        \/\/ \u6839\u636e\u4e3b\u952e\u5220\u9664\n        articleRepo.deleteById(1L);\n\n        \/\/ \u5168\u90e8\u5220\u9664\n        articleRepo.deleteAll();\n    }\n\n    \/**\n     * \u6d4b\u8bd5\u5206\u9875\u6392\u5e8f\u67e5\u8be2\n     *\/\n    @Test\n    public void testQuery() {\n        Sort sort = Sort.by(\"thumbUp\", \"updateTime\").descending();\n        PageRequest pageRequest = PageRequest.of(0, 5, sort);\n        Page&lt;Article> all = articleRepo.findAll(pageRequest);\n        log.info(\"\u3010\u603b\u9875\u6570\u3011= {}\", all.getTotalPages());\n        log.info(\"\u3010\u603b\u6761\u6570\u3011= {}\", all.getTotalElements());\n        log.info(\"\u3010\u5f53\u524d\u9875\u6570\u636e\u3011= {}\", JSONUtil.toJsonStr(all.getContent().stream().map(article -> \"\u6587\u7ae0\u6807\u9898\uff1a\" + article.getTitle() + \"\u70b9\u8d5e\u6570\uff1a\" + article.getThumbUp() + \"\u66f4\u65b0\u65f6\u95f4\uff1a\" + article.getUpdateTime()).collect(Collectors.toList())));\n    }\n}\n<\/pre>\n\n\n\n<p>3.7 \u66f4\u65b0<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Slf4j\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class ArticleRepositoryTest {\n    @Autowired\n    private ArticleRepository articleRepo;\n\n    @Autowired\n    private MongoTemplate mongoTemplate;\n\n    \/**\n     * \u6d4b\u8bd5\u70b9\u8d5e\u6570\u3001\u8bbf\u5ba2\u6570\uff0c\u4f7f\u7528save\u65b9\u5f0f\u66f4\u65b0\u70b9\u8d5e\u3001\u8bbf\u5ba2\n     *\/\n    @Test\n    public void testThumbUp() {\n        articleRepo.findById(1L).ifPresent(article -> {\n            article.setThumbUp(article.getThumbUp() + 1);\n            article.setVisits(article.getVisits() + 1);\n            articleRepo.save(article);\n            log.info(\"\u3010\u6807\u9898\u3011= {}\u3010\u70b9\u8d5e\u6570\u3011= {}\u3010\u8bbf\u5ba2\u6570\u3011= {}\", article.getTitle(), article.getThumbUp(), article.getVisits());\n        });\n    }\n\n    \/**\n     * \u6d4b\u8bd5\u70b9\u8d5e\u6570\u3001\u8bbf\u5ba2\u6570\uff0c\u4f7f\u7528\u66f4\u4f18\u96c5\/\u9ad8\u6548\u7684\u65b9\u5f0f\u66f4\u65b0\u70b9\u8d5e\u3001\u8bbf\u5ba2\n     *\/\n    @Test\n    public void testThumbUp2() {\n        Query query = new Query();\n        query.addCriteria(Criteria.where(\"_id\").is(1L));\n        Update update = new Update();\n        update.inc(\"thumbUp\", 1L);\n        update.inc(\"visits\", 1L);\n        mongoTemplate.updateFirst(query, update, \"article\");\n\n        articleRepo.findById(1L).ifPresent(article -> log.info(\"\u3010\u6807\u9898\u3011= {}\u3010\u70b9\u8d5e\u6570\u3011= {}\u3010\u8bbf\u5ba2\u6570\u3011= {}\", article.getTitle(), article.getThumbUp(), article.getVisits()));\n    }\n}\n<\/pre>\n\n\n\n<p>3.8 \u9ad8\u7ea7\u67e5\u8be2<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Slf4j\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class ArticleRepositoryTest {\n    @Autowired\n    private ArticleRepository articleRepo;\n\n    @Autowired\n    private MongoTemplate mongoTemplate;\n    \/**\n     * \u67e5\u8be2,\u6761\u4ef6\u5339\u914d\/\u6392\u5e8f\/\u5206\u9875, \u57fa\u4e8e\u7ee7\u627fMongoRepository\u5b9e\u73b0\n     *\/\n    @Test\n    public void testQuery1() {\n        \/**\n         * \u5339\u914d\u6761\u4ef6\u6784\u9020\n         *\/\n        Article article = Article.builder()\n            .title(\"ayyg6qetc2jigduentiz\")\n            .content(\"tx1549k4dbu05ou83tx8te0gx1\")\n            .build();\n        \/\/ \u6307\u5b9a\u5b57\u6bb5\u5339\u914d\u7c7b\u578b\n        ExampleMatcher withMatcher = ExampleMatcher.matching()\n            \/\/ \u5ffd\u7565\u5927\u5c0f\u5199\n            .withIgnoreCase()\n            \/\/ \u6307\u5b9a\"title\"\u4e3a\u7cbe\u786e\u5339\u914d\n            .withMatcher(\"title\", ExampleMatcher.GenericPropertyMatcher::exact)\n            \/\/ \u6307\u5b9a\"content\"\u4e3a\u6a21\u7cca\u5339\u914d\n            .withMatcher(\"content\", ExampleMatcher.GenericPropertyMatcher::contains);\n        Example&lt;Article> example = Example.of(article,withMatcher);\n\n        \/**\n         * \u6392\u5e8f\u89c4\u5219\n         *\/\n        Sort sort = Sort.by(\"updateTime\").descending();\n\n        \/**\n         * \u5206\u9875\n         *\/\n        PageRequest pageRequest = PageRequest.of(0, 5, sort);\n\n        \/**\n         * \u5206\u9875\u67e5\u8be2\n         *\/\n        Page&lt;Article> articleRepoAll = articleRepo.findAll(example, pageRequest);\n\n        \/**\n         * \u6253\u5370\n         *\/\n        log.info(JSONUtil.toJsonStr(articleRepoAll.getContent()));\n    }\n\n    \/**\n     * \u67e5\u8be2,\u6761\u4ef6\u5339\u914d\/\u6392\u5e8f\/\u5206\u9875, \u57fa\u4e8eMongoTemplate\u5b9e\u73b0\n     *\/\n    @Test\n    public void testQuery2() {\n        \/**\n         * \u67e5\u8be2\u6761\u4ef6\n         *\/\n        Criteria criteria = Criteria\n            \/\/ \u7cbe\u786e\u5339\u914d\n            .where(\"title\").is(\"ayyg6qetc2jigduentiz\")\n            \/\/ \u6a21\u7cca\u5339\u914d, \u7528\u6b63\u5219: .*[xxx].*\n            .and(\"content\").regex(\".*tx1549k4dbu05ou83tx8te0gx1.*\")\n            \/\/ \u5339\u914d\u660e\u7ec6\u91cc\u7684\u5b57\u6bb5\n            .and(\"ids\").elemMatch(Criteria.where(\"id\").is(1))\n            \/\/ \u5339\u914d\u591a\u4e2a\u5e76\u884c\u6216\n            .andOperator(\n                        new Criteria().orOperator(\n                                Criteria.where(\"visits\").exists(false),\n                                Criteria.where(\"visits\").is(1)\n                        ),\n                        new Criteria().orOperator(\n                                Criteria.where(\"thumbUp\").exists(false),\n                                Criteria.where(\"thumbUp\").is(1)\n                        )\n\n                );\n            ;\n\n        \/**\n         * \u6392\u5e8f\u89c4\u5219\n         *\/\n        Sort sort = Sort.by(\"updateTime\").descending();\n\n\n        \/**\n         * \u5206\u9875\n         *\/\n        PageRequest pageRequest = PageRequest.of(1, 5, sort);\n\n        Query query = Query.query(criteria).with(sort).with(pageRequest);\n\n        List&lt;Article> articles = mongoTemplate.find(query, Article.class);\n        PageImpl&lt;Article> page = (PageImpl&lt;Article>) PageableExecutionUtils.getPage(articles, pageRequest, () -> mongoTemplate.count(Query.query(criteria),Article.class));\n        \n        \/\/ \u6253\u5370\n        Optional.of(page.getContent()).ifPresent(articles1 -> {\n            articles1.forEach(article -> {\n                log.info(\"\u6253\u5370\u6570\u636e:{}\",JSONUtil.toJsonStr(article));\n            });\n        });\n    }\n}\n<\/pre>\n\n\n\n<p>3.9 MongoTemplate \u5b9e\u73b0 \u8054\u8868\/\u5206\u9875\/\u6392\u5e8f\u67e5\u8be2<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    public IPage&lt;Article> pageInfo(){\n\n        \/**\n         * \u8054\u8868\u67e5\u8be2\n         * \u53c2\u65701: \u4ece\u8868\u8868\u540d\n         * \u53c2\u65702: \u4e3b\u8868\u5173\u8054\u5b57\u6bb5\n         * \u53c2\u65703: \u4ece\u8868\u5173\u8054\u5b57\u6bb5\n         * \u53c2\u65704: \u67e5\u51fa\u4ece\u8868\u6570\u636e\u96c6\u5408\u7684\u522b\u540d \u4f8b\u5982\u4e3b\u8868\u6570\u636e{\"name\":\"wpr\",\"age\":18} , \u5173\u8054\u4ece\u8868\u540e\u7ed3\u679c{\"name\":\"wpr\",\"age\":18,\"userInfo\":[]}, \u4ece\u8868\u6ca1\u6570\u636e\u5219\u4e3a[]\n         *\/\n        LookupOperation lookup = Aggregation.lookup(\"user\", \"userId\", \"userId\", \"userInfo\");\n\n        \/\/ \u5b50\u96c6\u5408\u4e0d\u80fd\u4e3a\u7a7a\n        Criteria criteria = Criteria.where(\"userInfo\").not().size(0);\n        \/\/ \u5b50\u96c6\u5408\u6761\u4ef6\n        criteria.and(\"userInfo.six\").is(1);\n        \/\/ \u4e3b\u8868\u6761\u4ef6\n        criteria.and(\"title\").is(\"hello_world\");\n        \/\/ \u6761\u4ef6\u7c7b\u578b\u8f6c\u6362\n        MatchOperation matchOperation = Aggregation.match(criteria);\n\n        \/**\n         * \u67e5\u8be2\u603b\u6570\n         *\/\n        CountOperation countOperation = Aggregation.count().as(\"total\");\n        \/\/ project: \u8868\u793a\u7ed3\u679c\u53ea\u67e5\u8be2\u5b57\u6bb5:total\n        ProjectionOperation project = Aggregation.project(\"total\");\n        \/\/ \u6761\u4ef6\u4e00\u5b9a\u8981\u6392\u597d\u5148\u540e\u987a\u5e8f\n        Aggregation aggregation = Aggregation.newAggregation(lookup, matchOperation, countOperation, project);\n        AggregationResults&lt;Map> aggregate = mongoTemplate.aggregate(aggregation, \"article\", Map.class);\n        List&lt;Map> aggregateMappedResults = aggregate.getMappedResults();\n        \/\/ \u603b\u6570\n        Integer total = CollectionUtils.isEmpty(aggregateMappedResults) ? 0 : (int)aggregateMappedResults.get(0).get(\"total\");\n\n        if(Objects.equals(total,0)){\n            return new Page&lt;>();\n        }\n\n        \/**\n         * \u5206\u9875\u67e5\u8be2\n         *\/\n        \/\/ \u6392\u5e8f\u6761\u4ef6\n        SortOperation sortOperation = Aggregation.sort(Sort.by(\"updateTime\").descending());\n        \/\/ \u8fc7\u6ee4\u524dn\u6761\u6570\u636e\n        SkipOperation skipOperation = Aggregation.skip(0L);\n        \/\/ \u67e5\u8be2n\u6761\u6570\u636e\n        LimitOperation limitOperation = Aggregation.limit(10);\n        Aggregation pageAggregation = Aggregation.newAggregation(lookup, matchOperation, sortOperation,skipOperation,limitOperation);\n        AggregationResults&lt;Article> result = mongoTemplate.aggregate(pageAggregation,\"article\", Article.class);\n        List&lt;Article> articles = result.getMappedResults();\n        Page&lt;Article> page = new Page&lt;>();\n        page.setTotal(total);\n        page.setRecords(articles);\n        return page;\n    }\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00. \u6982\u8ff0 \u53c2\u8003\u5f00\u6e90\u9879\u76eehttps:\/\/github.com\/xkcoding\/spring-boot-dem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7248"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7248"}],"version-history":[{"count":1,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7248\/revisions"}],"predecessor-version":[{"id":7251,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7248\/revisions\/7251"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}