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