Java代码MongoTemplate中应用实例

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")),

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值