java操作mongDB聚合查询(条件及子文档删选filter)

现在网上关于mongDB的技术帖子不是很多,由于mongDB的存储结构和自动更新的特性,我们在项目中用到了,本文主要写简单的条件查询和filter筛选满足条件的子文档

文档结构:

内部结构: 

需求:筛选出一个时间段的,type=TMP,并且筛选出子文档 gridNo=3的子文档(其他的都不要)

文档实体类(和mongDB保持一致):

子文档实体类(和mongDB保持一致):

1.首先是mongDB的shell脚本

db.scmocForecast.aggregate([
    { 
        $match: { 
            "observeTime" : ISODate("2018-11-26T08:00:00.000+08:00"),
            "forecastTime" : { $gte : ISODate("2018-11-26T00:00:00.000+08:00") , $lte : ISODate("2018-11-26T23:01:00.000+08:00")},
            "type":"TMP"
            }
    },   
   {
      $project: {
         _id:1,
         _class:1,
         observeTime:1,
         forecastTime:1,
         type:1,
         forecastData: {
            $filter: {
               input: "$forecastData",
               as: "forecastData",
               cond: {
                       $eq:["$$forecastData.gridNo", 3]
                 }
               
            }
         }
      }
   }
])

shell写法,官方文档很详细,可以到里面找https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/

2.java语言操作聚合Aggregation(测试可行),这里也可以只筛选子文档的对象出来,看自己需求

Aggregation:聚合查询,里面就是一个个管道来筛选数据

注入模板:

3.还有种写法就是拼装Aggregation(原理一样的,不过很容易出错,不推荐)

逻辑: 

查询结果:成功的筛选出了子文档

 

就写到这里,初学mongDB有什么不对的,相互讨论,如果对你也有帮助,给个评论,谢谢 

 

发布了10 篇原创文章 · 获赞 7 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览