官方参考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));