mongoDB高级查询

mongo根据子文档字段过滤:

-- mongo查询子文档
db.table.aggregate([
		{
			$unwind:"$peoples" -- 查询子文档名
		},
		{
			$match:{
					"peoples.age":24, -- 子文档过滤条件,此处可用like,gt,lt等
					"_id":"123" -- 此处可用in
				}
		},
		{
				$project:{
					"_id":1,
					"peoples.age":1,
					"peoples.name":1, -- 定义需要返回的字段
					dif:{
							$eq:["peoples.city","peoples.province"] -- 此处可二次过滤
						}
				}
		}
])

mongo分页查询:

-- mongoTemplate实现
Query query = new Query();
List<Object> infos = mongoTemplate.find(query.skip(skipNum).limit(limitNum),Object.class,tableName)
--mongo 查询
db.table.find().limit(100).skip(1000) -- limit 限制获取记录数量,skip跳过的记录数量

mongo分页,当数据量大时,skip关键字会导致查询性能变慢,分页查询修改思路:
只用limit关键字,查询结果添加排序,使用上次查询结果最大值作为查询条件

Query query = new Query();
if(首次进来) {
	mongoTemplate.find(query.limit(limitNum).with(Sort.by("_id")),Object.class,tableName);
} else {
	query.addCriteria(Criteria.where("_id").gt(lastTimeMaxId));
	mongoTemplate.find(query.limit(limitNum).with(Sort.by("_id")),Object.class,tableName);	
}

mongo查询总数:

Query query = new Query();
long count = mongoTemplate.count(query,tableName);  -->数据量少的场景,如果数据量过大,直接用Count会导致查询超时
count = mongoTemplate.getCollection(tableName).estimatedDocumentCount();  --> 数据量大的场景
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值