MongoTemplate简单API

本文详细介绍MongoDB中复杂的查询技巧,包括日期类型比较、字段筛选、聚合函数使用、多条件查询、模糊搜索及数据统计等操作。通过具体示例展示如何高效管理和分析数据库中的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/weixin_44004647/article/details/88580208

对于Date类型的比较 :

    db.Trade.find({"$and":[{"pfOrderTime":{"$gte":new Date("2018-1-1")}},{"pfOrderTime":{"$lte":new Date("2020-1-1")}}]})
   .projection({})
   .sort({_id:-1})
   .limit(100)

Trade:name of collection

pfOrderTime:要比较的Date字段

new Date的方式也可以用


#查找满足条件的一条数据
db.Trade.findOne({"businessUnitCode":"TBWEIRUAN2"})

#对于Date类型的比较 :也可以使用new ISODate()进行比较
    db.Trade.find({
	"$and": [{
		"pfOrderTime": {
			"$gte": new Date("2018-1-1")
		}
	}, {
		"pfOrderTime": {
			"$lte": new Date("2020-1-1")
		}
	}]
    })
   .projection({})
   .sort({_id:-1})
   .limit(100)
   
#根据projection做fliter 0代表该字段不显示 1代表只看这些为1的字段
#_id 默认值是1 
db.Trade.find({})
   .projection({"_id":0,"businessUnitCode":0})
   .sort({_id:-1})
   .limit(100)

#只看id字段 sort表示按照字段进行排序 -1 由大到小 1由小到大
db.Trade.find({})
   .projection({_id:1})
   .sort({_id:-1})
   .limit(100)
   
#效果一样   
// db.Trade.aggregate({$project: {_id:1}})
db.Trade.aggregate()
    .project({_id:1})

#聚合函数求和分组
db.Trade.aggregate()
    .group({
          _id: "$businessUnitCode",
         count:{"$sum":1}
    })

 地方

 

#聚合函数查每个职位的总工资和平均工资 sum avg max min 
db.emps.aggregate().group({
      _id: "$job",
      count:{"$sum":1},
      job_salary_sum:{"$sum":"$salary"},
      job_salary_avg:{"$avg":"$salary"}
})

#将查询的数据存到数组中  push
db.emps.aggregate()
    .group({
          _id: "$job",
          salary:{"$push":"$salary"}
    })
    
#将查询的结果放到数组中并且去重复 addToSet
db.emps.aggregate()
    .group({
          _id: "$job",
          name: {"$push":"$name"},
          salary:{"$addToSet":"$salary"}
    })    
    
    
#多条件查询
db.emps.find({salary:{$gte:2000,$lte:5000}})   

#$nin 不在数组的范围内  $in表示在数组内 $all 数组里必须全满足
db.emps.find({salary:{$nin:[1000,2000,3000]}})
db.emps.find({"salary":{$all:[1000]}})

#模糊查询 查'小’开头 包含 结尾的
db.emps.find({name:/^小/})
db.emps.find({name:/小/})
db.emps.find({name:/小$/})

#使用distinct去重
db.emps.distinct("name")

#效果相同
// db.emps.find({age:{$gt:30}})
db.emps.find({$where:"this.age>30"})

#查询记录数目统计
db.emps.find().count()

#执行删除
db.emps.remove({job:{$in:["Clerkk","Clermk"]}})

#前者查询返回find的总条数 后者返回find之后skip 然后再limit的数目
#简单说 后者返回显示的数目
db.emps.find().skip(4).limit(2).count()
db.emps.find().skip(4).limit(2).count(true)

#查询字段为null的 即赋值的时候定义成null 区别于没有这个字段
#前者查出的结果包含没有定义该字段的  后者查出来的结果满足要求
db.emps.find({job:null})
db.emps.find({job:{$exists:true,$in:[null]}})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值