package com.x.mongodb;

import java.net.UnknownHostException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.bson.types.BasicBSONList;
import org.bson.types.ObjectId;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

/**
* 查询</br>
* : $in { "name1" : { "$in" : [ "zhou28-1" , "zhou29"]}}</br>
* : $nin { "age" : { "$nin" : [ 1 , 2]}}
* : $or { "$or" : [ { "name1" : { "$in" : [ "zhou28-1" , "zhou29"]}}]}</br>
* : $or and{ "$or" : [ { "name1" : { "$in" : [ "zhou28-1" , "zhou29"]}}] , "name2" : "zhou"}</br>
* : 范围查询 { "age" : { "$gte" : 2 , "$lte" : 21}}</br>
* : $ne { "age" : { "$ne" : 23}}</br>
* : $lt { "age" : { "$lt" : 23}}
* @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
* @version <b>1.0</b>
*/
public final class MongoDBUtil {

private static final String HOST = "127.0.0.1";

private static final String dbName = "test";

private static Mongo mongo;

private static DB db;

static {
try {
mongo = new Mongo(HOST);
db = mongo.getDB(dbName);
// db.authenticate(username, passwd)
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
}

private MongoDBUtil() {
}

/**
* 判断集合是否存在
* <br>------------------------------<br>
* @param collectionName
* @return
*/
public static boolean collectionExists(String collectionName) {
return db.collectionExists(collectionName);
}

/**
* 查询单个,按主键查询
* <br>------------------------------<br>
* @param id
* @param collectionName
*/
public static void findById(String id, String collectionName) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("_id", new ObjectId(id));
findOne(map, collectionName);
}

/**
* 查询单个
* <br>------------------------------<br>
* @param map
* @param collectionName
*/
public static void findOne(Map<String, Object> map, String collectionName) {
DBObject dbObject = getMapped(map);
DBObject object = getCollection(collectionName).findOne(dbObject);
print(object);
}

/**
* 查询全部
* <br>------------------------------<br>
* @param cursor
* @param collectionName
*/
public static void findAll(CursorObject cursor, String collectionName) {
find(new HashMap<String, Object>(), cursor, collectionName);
}

/**
* count
* <br>------------------------------<br>
* @param map
* @param collectionName
* @return
*/
public static long count(Map<String, Object> map, String collectionName) {
DBObject dbObject = getMapped(map);
return getCollection(collectionName).count(dbObject);

}

/**
* 按条件查询 </br>
* 支持skip,limit,sort
* <br>------------------------------<br>
* @param map
* @param cursor
* @param collectionName
*/
public static void find(Map<String, Object> map, CursorObject cursor, String collectionName) {
DBObject dbObject = getMapped(map);
find(dbObject, cursor, collectionName);
}

/**
* 查询
* <br>------------------------------<br>
* @param dbObject
* @param cursor
* @param collectionName
*/
public static void find(DBObject dbObject, final CursorObject cursor, String collectionName) {
CursorPreparer cursorPreparer = cursor == null ? null : new CursorPreparer() {
public DBCursor prepare(DBCursor dbCursor) {
if (cursor == null) {
return dbCursor;
}
if (cursor.getLimit() <= 0 && cursor.getSkip() <=0 && cursor.getSortObject() == null) {
return dbCursor;
}
DBCursor cursorToUse = dbCursor;
if (cursor.getSkip() > 0) {
cursorToUse = cursorToUse.skip(cursor.getSkip());
}
if (cursor.getLimit() > 0) {
cursorToUse = cursorToUse.limit(cursor.getLimit());
}
if (cursor.getSortObject() != null) {
cursorToUse = cursorToUse.sort(cursor.getSortObject());
}
return cursorToUse;
}
};
find(dbObject, cursor, cursorPreparer, collectionName);
}

/**
* 查询
* <br>------------------------------<br>
* @param dbObject
* @param cursor
* @param cursorPreparer
* @param collectionName
*/
public static void find(DBObject dbObject, CursorObject cursor, CursorPreparer cursorPreparer, String collectionName) {
DBCursor dbCursor = getCollection(collectionName).find(dbObject);
if (cursorPreparer != null) {
dbCursor = cursorPreparer.prepare(dbCursor);
}
Iterator<DBObject> iterator = dbCursor.iterator();
while (iterator.hasNext()) {
print(iterator.next());
}
}

/**
* 获取集合(表)
* <br>------------------------------<br>
* @param collectionName
* @return
*/
public static DBCollection getCollection(String collectionName) {
return db.getCollection(collectionName);
}

/**
* 获取所有集合名称
* <br>------------------------------<br>
* @return
*/
public static Set<String> getCollection() {
return db.getCollectionNames();
}

/**
* 创建集合
* <br>------------------------------<br>
* @param collectionName
* @param options
*/
public static void createCollection(String collectionName, DBObject options) {
db.createCollection(collectionName, options);
}

/**
* 删除
* <br>------------------------------<br>
* @param collectionName
*/
public static void dropCollection(String collectionName) {
DBCollection collection = getCollection(collectionName);
collection.drop();
}

/**
*
* <br>------------------------------<br>
* @param map
* @return
*/
private static DBObject getMapped(Map<String, Object> map) {
DBObject dbObject = new BasicDBObject();
Iterator<Entry<String, Object>> iterable = map.entrySet().iterator();
while (iterable.hasNext()) {
Entry<String, Object> entry = iterable.next();
Object value = entry.getValue();
String key = entry.getKey();
if (key.startsWith("$") && value instanceof Map) {
BasicBSONList basicBSONList = new BasicBSONList();
Map<String, Object> conditionsMap = ((Map)value);
Set<String> keys = conditionsMap.keySet();
for (String k : keys) {
Object conditionsValue = conditionsMap.get(k);
if (conditionsValue instanceof Collection) {
conditionsValue = convertArray(conditionsValue);
}
DBObject dbObject2 = new BasicDBObject(k, conditionsValue);
basicBSONList.add(dbObject2);
}
value = basicBSONList;
} else if (value instanceof Collection) {
value = convertArray(value);
} else if (!key.startsWith("$") && value instanceof Map) {
value = getMapped(((Map)value));
}
dbObject.put(key, value);
}
return dbObject;
}

private static Object[] convertArray(Object value) {
Object[] values = ((Collection)value).toArray();
return values;
}

private static void print(DBObject object) {
Set<String> keySet = object.keySet();
for (String key : keySet) {
print(object.get(key));
}
}

private static void print(Object object) {
System.out.println(object.toString());
}
}

package com.x.mongodb;

import com.mongodb.DBObject;

/**
* 分页,排序对象
* @author <a href="http://blog.csdn.net/java2000_wl">java2000_wl</a>
* @version <b>1.0</b>
*/
public class CursorObject {

private int skip;

private int limit;

private Sort sort;

public CursorObject skip(int skip) {
this.skip = skip;
return this;
}

public CursorObject limit(int limit) {
this.limit = limit;
return this;
}

public int getSkip() {
return skip;
}

public int getLimit() {
return limit;
}

public Sort sort() {
if (this.sort == null) {
this.sort = new Sort();
}
return this.sort;
}

public DBObject getSortObject() {
if (this.sort == null) {
return null;
}
return this.sort.getSortObject();
}
}

mongodb- Java API 查询操作的更多相关文章

  1. MongoDB Java API操作很全的整理

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...

  2. Phoenix简介概述,Phoenix的Java API 相关操作优秀案例

    Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...

  3. python数据库-mongoDB的高级查询操作(55)

    一.MongoDB索引 为什么使用索引? 假设有一本书,你想看第六章第六节讲的是什么,你会怎么做,一般人肯定去看目录,找到这一节对应的页数,然后翻到这一页.这就是目录索引,帮助读者快速找到想要的章节. ...

  4. Mongodb JAVA API

    连接mongodb 1.连接一个mongodb ); 2.连接mongodb集群 MongoClient mongoClient = ), new ServerAddress("localh ...

  5. InfluxDB学习之InfluxDB的HTTP API查询操作

    在 InfluxDB学习 的上一篇文章:InfluxDB学习之InfluxDB的HTTP API写入操作 中,我们介绍了使用InfluxDB的HTTP API进行数据写入操作的过程,本文我们再来介绍下 ...

  6. MongoDB JAVA API Filters

    Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...

  7. HDFS Java API 常用操作

    package com.luogankun.hadoop.hdfs.api; import java.io.BufferedInputStream; import java.io.File; impo ...

  8. 使用java API查询java类

    一.java API的下载地址 前面列举了常用的java类,但只是介绍了功能,具体详细的用法(比如要知道该类的属性和方法)要需要调用java的API(Application Program Inter ...

  9. zookeeper Java API 简单操作示例

    本文主要介绍如何在java IDE中如何应用使用客户端与zookeeper服务器通信. 首先搭建maven环境,并在pom文件中加入zookeeper引用包: <!-- https://mvnr ...

随机推荐

  1. CVE-2017-8464复现 (远程快捷方式漏洞)

    我们的攻击机IP是192.168.222.133 目标机IP是192.168.222.132 我们首先生成一个powershell msfvenom -p windows/x64/meterprete ...

  2. Java学习笔记【持续更新】

    一个简单的java程序如下: class Sakura { public static void main(String[] arges) { system.out.println("Hel ...

  3. CTF---密码学入门第一题 这里没有key

    这里没有key分值:10 来源: 西普学院 难度:易 参与人数:5577人 Get Flag:1965人 答题人数:2074人 解题通过率:95% 你说没有就没有啊,俺为啥要听你的啊 解题链接: ht ...

  4. Vijos P1114 FBI树【DFS模拟,二叉树入门】

    描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种 ...

  5. javascript数据类型及转换

    此篇数据类型和转换只限于ECMA规范,规范用了比较大的篇幅讲数据类型和类型转换,理解了这个最基本的概念对表达式.语句.执行环境.对象及继承都有非常大的帮助,遂整理如下: 数据类型和值 类型转换 表达式 ...

  6. EC+VO+SCOPE for ES3

    词法环境 词法作用域 词法作用域(lexcical scope).即JavaScript变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码. 词法环境 用于定义特定变量和函数标识 ...

  7. thinkphp3.2.2邮箱发送

    浏览:7510 最后更新:2017-03-18 14:21 分类:类库 关键字: PHPMailer 第一步:准备PHPMailer 将下载的PHPMailer放到ThinkPHP/library/V ...

  8. thinkphp开发微信公众号时,验证基本配置提示请求url超时

    原因在index.php入口文件中必须有define('APP_NAME', 'Weixin'); 服务器url:http://bxu2713700584.my3w.com/Weixin/Index/ ...

  9. mac通过自带的ssh连接Linux服务器并上传解压文件

    需求: 1:mac连接linux服务器 2:将mac上的文件上传到linux服务器指定位置 3:解压文件 mac上使用命令,推荐使用 iterm2 .当然,也可以使用mac自带的终端工具. 操作过程: ...

  10. 【笔记】css 实现宽度自适应屏幕 高度自适应宽度

    如果说宽高自适应屏幕尺寸那么大家可能会想到 div{ width: 100%; height: 100% } 但是如果我要自适应屏幕尺寸的同时还要变成正方形呢?(高度和宽度相等而高度不能写死) 那就要 ...