1、含日期查询 从起始时间到结束时间
BasicDBObject queryObj = new BasicDBObject();
queryObj.put("date",new BasicDBObject().append("$gte",starttime).append("$lt",endtime));
2、distinct 查询
BasicDBObject queryObj = new BasicDBObject();
coll.distinct("field_name",queryObj);// field_name 为数据库中需要distinct的字段名称,queryObj为查询条件 ,先执行查询条件后在distinct;返回为一个list集合 里面存放所有不重复的 field_name.
这种方式还是有中缺陷,如果数据量过大 list可能超出容量,不好控制,可以使用group by的方法替换
3、exists 查询
BasicDBObject basicObj = new BasicDBObject();
BasicDBObject andSearch = new BasicDBObject();
andSearch.put("$gte", start.getTime());andSearch.put("$lt", end.getTime());basicObj.put("date", andSearch);
basicObj.put("field_name", new BasicDBObject("$exists", true)); //若数据库中 field_name 这个字段有值 (包含null),则符合条件,反之这条记录没有这个字段则不符合条件
4、group 查询 (分组查询)
Map<String, Integer> map = new HashMap<String,Integer>();
DBCollection coll = MongoDB.getDBCollection("user_processed_corpus");
DBObject fields = new BasicDBObject();
fields.put("cust_name", "$cust_name");
DBObject groupField = new BasicDBObject();
groupField.put("_id", fields);
groupField.put("count", new BasicDBObject("$sum",1));
DBObject group = new BasicDBObject("$group",groupField);
BasicDBObject matchObj = new BasicDBObject();
matchObj.put("date",new BasicDBObject("$lt", end.getTime()).append("$gt",start.getTime()));
matchObj.put("userid", userid);
matchObj.put("from", from);
DBObject match = new BasicDBObject("$match",matchObj);
AggregationOutput output = coll.aggregate(match, group);
Iterable<DBObject> results = output.results();
Iterator<DBObject> it = results.iterator();
while(it.hasNext()){
DBObject obj = it.next();
DBObject name = (DBObject) obj.get("_id");
Object cust_name =name.get("cust_name");
if(CommonUtil.isNotNull(cust_name)){
map.put(cust_name.toString(), Integer.valueOf(obj.get("count").toString()));
}
}
4.2 group(方式2)
public static void group(){
BasicDBObject group = new BasicDBObject();
group.put("_id", "$userid");
group.put("count", new BasicDBObject("$sum",1));
AggregationOutput output = coll.aggregate(new BasicDBObject("$group",group));
DBObject obj = output.getCommand();
System.out.println(obj);
CommandResult result = output.getCommandResult();
System.out.println(result.get("result"));
}
5、addToSet(只能确保添加到记录,不能影响原有记录数据) 相同的数据则不添加
public static void addToSetAndEachElementInArray(String _id){
List list = new ArrayList();
list.add("str0");
list.add("str1");
list.add(new BasicDBObject("arr90",90));
BasicDBObject idObj = new BasicDBObject("_id", new ObjectId(_id));
BasicDBObject updateObj = new BasicDBObject();
updateObj.put("$addToSet", new BasicDBObject("arrays",new BasicDBObject("$each",list)));
WriteResult result = coll.update(idObj,updateObj);
System.out.println("update count:"+result.getN());
}
6、or 查询 将多个查询条件加入一个list中 用$or 连接list中的查询条件即可
public static void test1(){
BasicDBObject query1 = new BasicDBObject();
BasicDBObject query2 = new BasicDBObject();
query1.put("count", new BasicDBObject("$exists",false));
query2.put("count", new BasicDBObject("$exists",true));
BasicDBList list = new BasicDBList();
list.add(query2);
list.add(query1);
BasicDBObject query = new BasicDBObject();
query.put("$or", list);
int count = coll.find(query).count();
System.out.println(count);
}
7、in 查询
1 public void findByINQuery(int value1,int value2){
2 coll = getCollection("ParentColl");
3 BasicDBObject query=new BasicDBObject();
4 BasicDBList cond=new BasicDBList();
5 cond.add(value1);
6 cond.add(value2);
7 query.put("intData",new BasicDBObject("$in", cond));
8 DBCursor cur = coll.find(query);
9 while(cur.hasNext()){
10 System.out.println(cur.next());
11 }
12 }
8、addToSet的另外一种用法(本质相同) 对分组之后的数据在进行操作
userid question
1 a
1 b
2 c
2 a
2 b
1 a
3 c
3 b
3 a
1 public static void group1(){
2 BasicDBObject obj = new BasicDBObject();
3 BasicDBObject query = new BasicDBObject();
4 BasicDBObject match = new BasicDBObject();
5 BasicDBObject group = new BasicDBObject();
6 BasicDBObject g1 = new BasicDBObject();
7 //第一个分组 (userid 和 question 共同作为分组字段)
8 g1.put("userid", "$userid");
9 g1.put("question", "$question");
10 group.put("_id", g1);
11 //可以额外的添加一些字段(以便下次的统计操作)
12 group.put("count", new BasicDBObject("$sum",1));
13 group.put("userid",new BasicDBObject("$addToSet", "$userid"));
14 group.put("question",new BasicDBObject("$addToSet", "$question"));
15 obj.put("$group", group);
16 match.put("$match", query);
17
18 //对第一次分组产生的结果进行再次分组(第一次分组的结果见注1)
19 DBObject _group = new BasicDBObject();
20 _group.put("question", "$question");
21 DBObject groupFields1 = new BasicDBObject("_id", _group);
22 groupFields1.put("user_sum", new BasicDBObject("$sum", 1));
23 BasicDBObject group1 = new BasicDBObject();
24 group1.append("$group", groupFields1);
25
26 AggregationOutput out = coll.aggregate(match,obj,group1);
27 CommandResult result = out.getCommandResult();
28 BasicDBList record = (BasicDBList) result.get("result");
29 System.out.println(record.size());
30 }
注1:第一次分组的结果
[{
"_id" : {
"userid" : "0003",
"question" : "how"
},
"count" : 30,
"userid" : ["0003"],
"question" : ["how"]
}, {
"_id" : {
"userid" : "0002",
"question" : "I am comming"
},
"count" : 1,
"userid" : ["0002"],
"question" : ["I am comming"]
}, {
"_id" : {
"userid" : "0002",
"question" : "2323"
},
"count" : 1,
"userid" : ["0002"],
"question" : ["2323"]
}, {
"_id" : {
"userid" : "0002",
"question" : "how"
},
"count" : 38,
"userid" : ["0002"],
"question" : ["how"]
}, {
"_id" : {
"userid" : "0001",
"question" : "I comming"
},
"count" : 1,
"userid" : ["0001"],
"question" : ["I comming"]
}, {
"_id" : {
"userid" : "0002",
"question" : "123"
},
"count" : 1,
"userid" : ["0002"],
"question" : ["123"]
}, {
"_id" : {
"userid" : "0001",
"question" : "I am "
},
"count" : 1,
"userid" : ["0001"],
"question" : ["I am "]
}, {
"_id" : {
"userid" : "0001",
"question" : "I am comming"
},
"count" : 4,
"userid" : ["0001"],
"question" : ["I am comming"]
}
]
结果解释:_id 中的内容为分组的字段是唯一的,故作为_id 后面的count userid 和question都是在分组过程中手动添加上去的,这个其实就当做中间表 以便下面的数据统计和操作
9、模糊查询(pattern)
String like = "...";
Pattern pattern = Pattern.compile("^.*"+like+".*$", Pattern.CASE_INSENSITIVE);
BasicDBObject obj = new BasicDBObject();
obj.put("name",pattern);
coll.find(obj);
10、$eleMatch 查询(数组匹配查询)
DBObject edit = new BasicDBObject();
edit.put("slotname", "content");
query.put("slotbind", new BasicDBObject("$elemMatch", edit));
不难发现主要用到BasicDBObject、BasicDBList、DBCursor这三个类。BasicDBObject好比一个map,好比使用json查询中的{} 。BasicDBList是个list,用于or,nin等条件查询。DBCursor用于遍历结果集。其实只要将对应的json查询使用这3个类转化一下,就能写出对应的java代码了。
- MongoDB查询转对象是出错Element '_id' does not match any field or property of class
MongoDB查询转对象是出错Element '_id' does not match any field or property of class 解决方法: 1.在实体类加:[BsonIgno ...
- MongoDB查询操作限制返回字段的方法
这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下 映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中 ...
- mongodb查询文档
说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序).limit(分页).范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb ...
- [转]mongodb 查询条件:关系运算符"$lt", "$lte", "$gt", "$gte", "$ne" 逻辑运算符"$and“, "$or“, "$nor“
mongodb 查询条件 这节来说说mongodb条件操作符,"$lt", "$lte", "$gt", "$gte" ...
- Mongodb查询的用法,备注防止忘记
最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find() //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...
- mongodb查询关于大于小于的用法;
mongoDB查询操作符: http://www.runoob.com/mongodb/mongodb-operators.html 项目中需要的场景是这样的,每个人每天只能领取一张明信片,换句话说, ...
- MongoDB查询分析
MongoDB 查询分析可以确保我们建立的索引是否有效,是查询语句性能分析的重要工具.MongoDB 查询分析常用函数有:explain() 和 hint(). 1. explain(): 提供查询信 ...
- 【mongodb系统学习之十】mongodb查询(一)
十.mongodb查询:find ;查询时条件中不能引用文档中其他键的值: 1).查询数据库全部数据:语法db.collectionName.find();默认只显示前20条,如图: 2).按条件查询 ...
- MongoDb进阶实践之三 MongoDB查询命令详述
一.引言 上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建.使用和删除数据库,文档的操作也涉及到了文档的创建.删除.更新和查询,当然也包括集合的创建.重命 ...
- MongoDb进阶实践之六 MongoDB查询命令详述(补充)
一.引言 上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入,对查询又有了新的东西,决定补充进来.如果大家想看上一篇有关MongoDB查询的 ...
随机推荐
- Touch事件详解及区别,触屏滑动距离计算
移动端有四个关于触摸的事件,分别是touchstart.touchmove.touchend.touchcancel(比较少用), 它们的触发顺序是touchstart-->touchmove- ...
- Navicat破解
Navicat是一款我们经常使用的可视化sql工具,可偏偏它呢又收费,本着浪费可耻的理念,只有去网上找各种破解方法,却发现很多方法对于Navicat 12都不支持(本人使用的Navicat 12).最 ...
- Java笔记(一)编程基础与二进制
编程基础与二进制 一.编程基础 函数调用的基本原理: 函数调用中的问题: 1)参数如何传递? 2)函数如何知道返回什么地方? 3)函数结果如何传递给调用方? 解决思路是使用内存来函数调用过程中需要的数 ...
- redis -- python操作连接redis简单示例
1.先安装 redis,pyredis sudo pip install redis sudo pip install python-redis 2.示例: importredis >>& ...
- Android系统定制——Download Android System 及加载system镜像文件
定制android系统(配置及相关系统的镜像文件),具体可参考:Driver_All_in_One_V1.0——MT6735_6753.pdf文档,特别需要理解的是Download部分. 与之对应的软 ...
- [CSAcademy]Sum of Powers
[CSAcademy]Sum of Powers 题目大意: 给定\(n,m,k(n,m,k\le4096)\).一个无序可重集\(A\)为合法的,当且仅当\(|A|=m\)且\(\sum A_i=n ...
- Unity 显示FPS(C#语言)
直接上脚本了: using UnityEngine; using System.Collections; public class ShowFPS : MonoBehaviour { //设置帧率 A ...
- 咏南WEB APP开发框架
咏南WEB APP开发框架 咏南WEB桌面框架演示:47.106.93.126:9999 咏南WEB手机框架本地:47.106.93.126:8077 咏南CS框架下载:https://pan.bai ...
- 在python里调用java的py4j的使用方法
py4j可以使python和java互调 py4j并不会开启jvm,需要先启动jvm server,然后再使用python的client去连接jvm GatewayServer实例:允许python程 ...
- ajax的请求,参数怎么管理?
一般发送一条ajax 然后点击界面需要更改查询条件,第一种是做一个form表单比较合适的设计.更改了参数回收表单然后重新发送ajax: 还有一种是把参数缓存到变量中,然后更改了条件修改变量再次重发aj ...