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有什么不对的,相互讨论,如果对你也有帮助,给个评论,谢谢 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值