MangoDB-mophia实现实例

官方参考morphia induction: http://mongodb.github.io/morphia/

1. Project: 用Morphia返回匹配的数组元素 参考:https://cloud.tencent.com/developer/ask/126939说实话这个写的有丢丢误导我了,其实可以写的更简单点的。

对数组元素添加条件可以直接加match过滤条件,数组元素按照.分割如:

 .match(datastore.createQuery(A.class).filter("sampleObjects.sentByBot", true))
1.需要对多层数组进行过滤并取出
//数组内的数组,先拆开再用filter进行多层过滤
.unwind ("ruleSetResults").unwind ("ruleSetResults.hitRules")
.match (createQuery ().filter ("ruleSetResults.hitRules.hit",Boolean.TRUE))
//再project取需要的字段
.project (Projection.projection ("ruleName","ruleSetResults.hitRules.ruleName"))

Project获取日期格式

https://blog.csdn.net/qq_37105358/article/details/81064908


2. Group 查找参考CSDN:https://blog.csdn.net/tyutpanda/article/details/48651851

需求:有一个用户集合User,需要按userName和classId进行分组统计数量和总的grade,且成绩需要大于0,sql如下: 
select userName,classId,count(*) as count,sum(case when grade> 0 then grade else 0 end) as totalGrade from Users where grade > 0 group by userName,classId order by userName 按照如下: 

User集合:{ 
“_id” : ObjectId(“55bf10419d03fb1a88f990ba”), 
“userName” : “user6”, 
“password” : “123”, 
“grade” : 98, 
“classId” : 1, 
“createTime” : ISODate(“2015-08-12T06:59:57.318Z”) 
}

主要代码:

private static void sumWithGroup() {
        Datastore ds = DbUtils_Mongo.getMongoDbConnection();
        Query<Object> query = ds.getQueryFactory().createQuery(ds);
        AggregationPipeline pipeline = ds.createAggregation(Users.class)
                 .match(query.filter("grade >", 0))
                 .group(
                         id(grouping("userName"), grouping("classId")),
                         grouping("abc",first("userName")),
                         grouping("classId",first("classId")),
                         grouping("countAll",new Accumulator("$sum", 1)),
                         grouping("totalGrade", sum("grade"))
                         )
                 .sort(Sort.ascending("abc"));

        Iterator<UsersGroup> iterator = pipeline.aggregate(UsersGroup.class);
        System.out.println(iterator.hasNext());
         while (iterator.hasNext()) {
             UsersGroup ug = iterator.next();
             System.out.println(ug);
         }

    }

 

3.JAVA中条件

查询条件Java内容:

        两个Bson对象嵌套:

        BasicDBObject gt = new BasicDBObject("$gt",24);

        BasicDBObject queryObject = new BasicDBObject("age",gt);  

       组合多条件:

        BasicDBObject sexObj = new BasicDBObject("sex",1);

        BasicDBObject andObj = new BasicDBObject("$and",Arrays.asList(ageObj,sexObj));

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值