mongodb在java中常见的查询(一)
来源:互联网 发布:我的世界随机性知乎 编辑:程序博客网 时间:2024/05/29 21:17
mongodb是非关系型数据库,对于数据的操作跟关系型数据库有很大的区别,非通用sql,
那么在java中是如何进行数据读取呢?详情如下:
(聚合函数部分见下期<mongodb在java中常见的查询(二)>)
ps: mongodb不适合做业务系统,,只适合做缓存为主的key-value读取形式存放的 或者是静态缓存数据,或者 不太重要的数据(mongodb不支持事务处理)
和java的契合度不好,一样会写大量繁琐的代码,还不如两三行sql来得痛快,不过话说回来如果只是用key来取值确实方便.,..
package com.9203.mongo;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import java.util.Set;import java.util.regex.Pattern;import org.junit.Test;import com.mongodb.AggregationOutput;import com.mongodb.BasicDBList;import com.mongodb.BasicDBObject;import com.mongodb.BasicDBObjectBuilder;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.MapReduceCommand;import com.mongodb.MapReduceOutput;import com.mongodb.Mongo;import com.mongodb.QueryBuilder;import com.mongodb.WriteConcern;public class TestCase {@Test/** * 获取所有数据库实例 */public void testGetDBS() {List<String> dbnames = MongoUtil.getMong().getDatabaseNames();for (String dbname : dbnames) {System.out.println("dbname:" + dbname);}}@Test/** * 删除数据库 */public void dropDatabase() {MongoUtil.getMong().dropDatabase("my_new_db");}@Test/** * 查询所有表名 */public void getAllCollections() {Set<String> colls = MongoUtil.getDB().getCollectionNames();for (String s : colls) {System.out.println(s);}}@Testpublic void dropCollection() {MongoUtil.getColl("jellonwu").drop();}/** * 添加一条记录 */@Testpublic void addData() {DBCollection coll = MongoUtil.getColl("wujintao");BasicDBObject doc = new BasicDBObject();doc.put("name", "MongoDB");doc.put("type", "database");doc.put("count", 1);BasicDBObject info = new BasicDBObject();info.put("x", 203);info.put("y", 102);doc.put("info", info);coll.insert(doc);// 设定write concern,以便操作失败时得到提示coll.setWriteConcern(WriteConcern.SAFE);}@Test/** * 创建索引 */public void createIndex() {MongoUtil.getColl("wujintao").createIndex(new BasicDBObject("i", 1));}@Test/** * 获取索引信息 */public void getIndexInfo() {List<DBObject> list = MongoUtil.getColl("hems_online").getIndexInfo();for (DBObject o : list) {System.out.println(o);}}@Test/** * 添加多条记录 */public void addMultiData() {for (int i = 0; i < 100; i++) {MongoUtil.getColl("wujintao").insert(new BasicDBObject().append("i", i));}List<DBObject> docs = new ArrayList<DBObject>();for (int i = 0; i < 50; i++) {docs.add(new BasicDBObject().append("i", i));}MongoUtil.getColl("wujintao").insert(docs);// 设定write concern,以便操作失败时得到提示MongoUtil.getColl("wujintao").setWriteConcern(WriteConcern.SAFE);}@Test/** * 查找第一条记录 */public void findOne() {DBObject myDoc = MongoUtil.getColl("wujintao").findOne();System.out.println(myDoc);}@Test/** * 获取表中所有记录条数 */public void count() {System.out.println(MongoUtil.getColl("wujintao").getCount());System.out.println(MongoUtil.getColl("wujintao").count());}@Test/** * 获取查询结果集的记录数 */public void getCount() {DBObject query = new BasicDBObject("name", "a");long count = MongoUtil.getColl("wujintao").count(query);System.out.println(count);}@Test/** * 查询所有结果 */public void getAllDocuments() {DBCursor cursor = MongoUtil.getColl("wujintao").find();try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}@Test/** * 按照一个条件查询 */public void queryByConditionOne() {BasicDBObject query = new BasicDBObject();query.put("name", "MongoDB");DBCursor cursor = MongoUtil.getColl("wujintao").find(query);try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}@Test/** * AND多条件查询,区间查询 */public void queryMulti() {BasicDBObject query = new BasicDBObject();// 查询j不等于3,k大于10的结果集query.put("j", new BasicDBObject("$ne", 3));query.put("k", new BasicDBObject("$gt", 10));DBCursor cursor = MongoUtil.getColl("wujintao").find(query);try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}@Test/** * 区间查询 * select * from table where i >50 */public void queryMulti2() {BasicDBObject query = new BasicDBObject();query = new BasicDBObject();query.put("i", new BasicDBObject("$gt", 50)); // e.g. find all where i >DBCursor cursor = MongoUtil.getColl("wujintao").find(query);try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}@Test/** * 区间查询 * select * from table where 20 < i <= 30 //比较符 //"$gt": 大于 //"$gte":大于等于 //"$lt": 小于 //"$lte":小于等于 //"$in": 包含 */public void queryMulti3() {BasicDBObject query = new BasicDBObject();query = new BasicDBObject();query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));DBCursor cursor = MongoUtil.getColl("wujintao").find(query);try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}/** * 组合in和and select * from test_Table where (a=5 or b=6) and (c=5 or d = 6) */public void queryMulti4() {BasicDBObject query11 = new BasicDBObject();query11.put("a", 1);BasicDBObject query12 = new BasicDBObject();query12.put("b", 2);List<BasicDBObject> orQueryList1 = new ArrayList<BasicDBObject>();orQueryList1.add(query11);orQueryList1.add(query12);BasicDBObject orQuery1 = new BasicDBObject("$or", orQueryList1);BasicDBObject query21 = new BasicDBObject();query21.put("c", 5);BasicDBObject query22 = new BasicDBObject();query22.put("d", 6);List<BasicDBObject> orQueryList2 = new ArrayList<BasicDBObject>();orQueryList2.add(query21);orQueryList2.add(query22);BasicDBObject orQuery2 = new BasicDBObject("$or", orQueryList2);List<BasicDBObject> orQueryCombinationList = new ArrayList<BasicDBObject>();orQueryCombinationList.add(orQuery1);orQueryCombinationList.add(orQuery2);BasicDBObject finalQuery = new BasicDBObject("$and",orQueryCombinationList);DBCursor cursor = MongoUtil.getColl("wujintao").find(finalQuery);}@Test/** * IN查询 * if i need to query name in (a,b); just use { name : { $in : ['a', 'b'] } } * select * from things where name='a' or name='b' * @param coll */public void queryIn() {BasicDBList values = new BasicDBList();values.add("a");values.add("b");BasicDBObject in = new BasicDBObject("$in", values);DBCursor cursor = MongoUtil.getColl("wujintao").find(new BasicDBObject("name", in));try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}@Test/** * 或查询 * select * from table where name = '12' or title = 'p' * @param coll */public void queryOr() {QueryBuilder query = new QueryBuilder();query.or(new BasicDBObject("name", 12), new BasicDBObject("title", "p"));DBCursor cursor = MongoUtil.getColl("wujintao").find(query.get()).addSpecial("$returnKey", "");try {while (cursor.hasNext()) {System.out.println(cursor.next());}} finally {cursor.close();}}@Testpublic void customQueryField() throws UnknownHostException{ Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("zhongsou_ad"); BasicDBObjectBuilder bulder = new BasicDBObjectBuilder(); bulder.add("times",1); bulder.add("aid",1); DBCursor cusor = db.getCollection("ad_union_ad_c_1").find(new BasicDBObject(),bulder.get()); for (DBObject dbObject : cusor) { System.out.println(dbObject); }}@Testpublic void mapReduce() throws UnknownHostException{ Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("zhongsou_ad"); try { DBCollection books = db.getCollection("books"); BasicDBObject book = new BasicDBObject(); book.put("name", "Understanding JAVA"); book.put("pages", 100); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding JSON"); book.put("pages", 200); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding XML"); book.put("pages", 300); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding Web Services"); book.put("pages", 400); books.insert(book); book = new BasicDBObject(); book.put("name", "Understanding Axis2"); book.put("pages", 150); books.insert(book); String map = "function() { "+ "var category; " + "if ( this.pages >= 250 ) "+ "category = 'Big Books'; " + "else " + "category = 'Small Books'; "+ "emit(category, {name: this.name});}"; String reduce = "function(key, values) { " + "var sum = 0; " + "values.forEach(function(doc) { " + "sum += 1; "+ "}); " + "return {books: sum};} "; MapReduceCommand cmd = new MapReduceCommand(books, map, reduce, null, MapReduceCommand.OutputType.INLINE, null); MapReduceOutput out = books.mapReduce(cmd); for (DBObject o : out.results()) { System.out.println(o.toString()); } } catch (Exception e) { e.printStackTrace(); }}@Test public void GroupByManyField() throws UnknownHostException{ //此方法没有运行成功 Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("libary"); DBCollection books = db.getCollection("books"); BasicDBObject groupKeys = new BasicDBObject(); groupKeys.put("total", new BasicDBObject("$sum","pages")); BasicDBObject condition = new BasicDBObject(); condition.append("pages", new BasicDBObject().put("$gt", 0)); String reduce = "function(key, values) { " + "var sum = 0; " + "values.forEach(function(doc) { " + "sum += 1; "+ "}); " + "return {books: sum};} "; /** BasicDBList basicDBList = (BasicDBList)db.getCollection("mongodb中集合编码或者编码") .group(DBObject key, --分组字段,即group by的字段 DBObject cond, --查询中where条件 DBObject initial, --初始化各字段的值 String reduce, --每个分组都需要执行的Function String finial --终结Funciton对结果进行最终的处理 */ DBObject obj = books.group(groupKeys, condition, new BasicDBObject(), reduce); System.out.println(obj); AggregationOutput ouput = books.aggregate(new BasicDBObject("$group",groupKeys)); System.out.println(ouput.getCommandResult()); System.out.println(books.find(new BasicDBObject("$group",groupKeys))); }@Test/** * 分页查询 */public void pageQuery() {DBCursor cursor = MongoUtil.getColl("wujintao").find().skip(0).limit(10);while (cursor.hasNext()) {System.out.println(cursor.next());}}/** * 模糊查询 */public void likeQuery() {Pattern john = Pattern.compile("joh?n");BasicDBObject query = new BasicDBObject("name", john);// finds all people with "name" matching /joh?n/iDBCursor cursor = MongoUtil.getColl("wujintao").find(query);}@Test/** * 条件删除 */public void delete() {BasicDBObject query = new BasicDBObject();query.put("name", "xxx");// 找到并且删除,并返回删除的对象DBObject removeObj = MongoUtil.getColl("wujintao").findAndRemove(query);System.out.println(removeObj);}@Test/** * 更新 */public void update() {BasicDBObject query = new BasicDBObject();query.put("name", "liu");DBObject stuFound = MongoUtil.getColl("wujintao").findOne(query);stuFound.put("name", stuFound.get("name") + "update_1");MongoUtil.getColl("wujintao").update(query, stuFound);}}
阅读全文
0 0
- mongodb在java中常见的查询(一)
- mongoDB常见的查询索引
- MongoDB 常见的查询索引
- java中mongodb的查询及排序
- java中mongodb的查询及排序
- java 中 mongodb的各种操作查询
- java实现MongoDB查询一
- MongoDb在C#中查询
- 在MVC中实现MongoDB的分页查询
- mongodb在java中进行模糊查询以及时间段查询总结
- Java中使用mongodb的aggregate聚合查询
- 在.Net Core中使用MongoDB的入门教程(一)
- mongodb在java中的分页查询
- mongodb在Java中的分页查询
- 在Java中使用MongoDB
- 在SPRING DATA MONGODB中使用聚合统计查询(Java)
- 如何在Java中对MongoDB按日期进行查询统计
- java 中 mongodb的各种操作 模糊查询 精确查询 等等
- webshell的NTFS交换数据流文件隐藏及Python脚本查杀
- JSONCPP遍历JSON数据
- 微信公众号中高德地图显示路线
- SpringBoot15-springboot核心-Spring Boot运行原理
- cin/cout 效率问题
- mongodb在java中常见的查询(一)
- Java final修饰符
- java中的sleep()和wait()的区别
- java字符串拼接指定内容-左右组合(left/right padding)
- Android okhttp3 post get put 提交
- 从0开始学习 GitHub 系列之【了解Git】
- 安装Composer PHP Warning: copy(): SSL operation failed with code 1.
- Nginx和CORS
- 如何建设高质量外链的烦恼