MongoDB特殊查询格式化时间(库中时间+8):
db.mogOrderInfo.find({
"itemId":"9140040075",
"orderTime":{"$gte":ISODate("2019-07-09T22:00:00.000Z"),"$lte":ISODate("2019-07-10T04:00:00.000Z")},
"showStatus":{$in:[1,2,5]}},
{"orderId":1,
"orderTime":new Date(1),
"itemId":1}).forEach(
function(a){
a["orderTime"] = (new Date(a["orderTime"]).toString()); printjson(a)
}
)
展示时间为:"orderTime" : "Wed Jul 10 2019 10:08:09 GMT+0800"
如:"orderTime" : "2019-07-10 10:08:09"
.forEach(function(a){
function tran_val(val){
if(parseInt(val)<10){
val="0" +val;
}
return val;
}
var datenew = new Date(a["orderTime"]);
var year=datenew.getFullYear();
var month=tran_val(datenew.getMonth()+1);
var date=tran_val(datenew.getDate());
var hour=tran_val(datenew.getHours());
var minute=tran_val(datenew.getMinutes());
var second=tran_val(datenew.getSeconds());
var datastr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
a["orderTime"] = datastr
printjson(a)
}
)
添加排序:.sort({itemId:-1})
一、Criteria中方法含义
1.and:参数拼接 2.is:相当于等于 3.in:相当于sql中的in 4.ne:相当于不等于 5.orOperator:接受多个条件,组成or逻辑 6.where:拼接where条件 7.gte:>= 8.gt:> 9.lte:<= 10.lt:< 11.exists:true存在字段的记录 false:不存在字段的记录 12.模糊查询用正则表达式regex(pattern) 比如:Pattern pattern=Pattern.compile("^.*"+pattern_name+".*$", Pattern.CASE_INSENSITIVE); query.addCriteria(Criteria.where("name").regex(pattern));
二、Update中方法含义
1.set:添加参数
三、聚合函数
1.match进行条件拼接
2.group 分组字段(如果为表中不存在属性,不分组全部统计,如果为表中存在属性,按属性分组统计)
其中group下属性 1:count 统计分组各条件统计数量 2:sum 分组各条件指定属性求和 3:addToSet 分组各条件指定属性中某属性进行收集为集合 4.max 分组各条件指定属性求最大一个值 注意:使用各属性必须设定别名 as
3.sort 添加排序属性,注意:排序字段必须为group统计后面显式某个属性
4.skip 和 limit 如同 mysql中limit a,b
四、代码实例
1.保存
this.mongoTemplate.save(实体)
2.删除
Criteria criteria = Criteria.where("_id").is(id);
if (null != criteria) {
Query query = new Query(criteria);
if (null != query && this.findOne(query) != null) {
mongoTemplate.remove(query, this.getEntityClass());
}}
3.更新(如果存在属性更新值,如果不存在属性则新增属性和值)
Query query = Query.query(Criteria.where("_id").is(mogOrderInfo.getId()));
Update update = this.orderParamUpdate(条件实体);
this.updateMulti(query,update);
4.查询多条件列表
Query query = new Query();
query.addCriteria(this.orderParamFile(条件实体));
Sort sort = new Sort(Sort.Direction.DESC, "orderTime");
query.with(sort);
List<MogOrderInfo> list = this.findList(query);
5.查询多条件列表分页
BasePageVo page = reqOrderVo.getBasePageVo();
Query query = new Query();
query.addCriteria(this.orderParamFile(条件实体));
Sort sort = new Sort(Sort.Direction.DESC, "orderTime");
query.with(sort);
List<MogOrderInfo> list = this.findPage(query,page.getStartRow(),page.getPageSize());
long count = this.count(query);
Pagination<MogOrderInfo> pagination = new Pagination(page.getPageNo(),page.getPageSize(),(int)count);
pagination.setList(list);
6.统计聚合函数查询
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(this.orderParamFile(条件实体)),
Aggregation.group("id").count().as("countOrderNum").sum("priceTotal").as("sumPriceTotal").sum("awardMoney").as("sumAwardMoney").sum("commMoney").as("sumCommMoney"));
AggregationResults<VitalOrderVo> aggResults = this.mongoTemplate.aggregate(aggregation, "mogOrderInfo(数据库表实体)", VitalOrderVo.class);
List<VitalOrderVo> vitalOrderVos = aggResults.getMappedResults();
重要:Aggregation.group("id")中 如果 id随意字段(不属数据库表实体字段) 表示不分组 如果id为数据库表实体字段就是按照字段分组
返回结果集:自定义VitalOrderVo
public class VitalOrderVo implements Serializable {
private Long parentUserId;//下单人直属上级id
private Long countOrderNum;//订单总数
private Long sumPriceTotal;//订单实付总额 单位:分
private Long sumAwardMoney;//提奖总额 单位:分
private Long sumCommMoney;//佣金总额 单位:分
}
7.统计聚合函数查询 分页分组
BasePageVo page = reqOrderVo.getBasePageVo();
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(this.orderParamFileParentUserId(条件实体)),
Aggregation.group("parentUserId").count().as("countOrderNum").sum("priceTotal").as("sumPriceTotal").sum("awardMoney").as("sumAwardMoney").sum("commMoney").as("sumCommMoney"),
Aggregation.sort(new Sort(Sort.Direction.DESC, "sumAwardMoney")),