mongDB基本命令和Java操作MongoDB
上一篇博文《mongoDB安装》我们安装了mongoDB,现在来复习一下它的一些基本命令:
mongoDB的bin目录加入到path之后,命令行中输入mongo:
然后我们进入正题
1、查看有哪些数据库:
show dbs

我们可以看见有两个库,一个是之前做即时通讯系统测试的chat库,一个是local库。
2、切换数据库
use chat
如上命令我们切换到即时通讯系统的库:
3、查看数据集合:
show collections
使用上面的命令,可以查看我们即时通讯系统的chat库中的所有数据集合。我们可以看见一些诸如存放消息的msg集合、存放用户信息的users集合,以及存放索引信息的system.indexes集合。

4、使用帮助命令:
*.help()
这里的*可以是数据库、数据集合等。
如数据库:
db.help()
可以看见一些常见的操作如addUser添加用户、getCollectionNames获取数据集合名称等等。

或者数据集合的:
db.chat.help()
我们可以看见经常用到的命令:
保存save()、删除remove()、查询find()、计数count()、删除drop()、排序sort()、类似于MySQL的limit()等等方法,而且给出了一些例子和简单的语法说明。

5、插入save()/insert()
先看save,从上面的help中我们看见,save和insert都接受一个obj对象。我们用类似于Actionscript/Javascript的方式声明一个对象,然后保存:
db.msg.save({_id:1,from:"zhangsam",to:"lisi",msg:"hello world!",time:"1373615052442"})
//保存一条张三对李四说的消息,内容为"hello world!",同时保存一个时间戳。

然后我们使用find命令查一下,可以看见我们的数据保存进去了:
db.msg.find()

然后我们试着使用insert插入一条_id仍然为1的数据,看看会出现什么:
db.msg.insert({_id:1,from:"lisi",to:"zhangsan",msg:"hello,zhangsan!",time:"1373615052442"})
//尝试插入一条李四对张三说的话
然后可以发现报错了。告诉我们chat库的msg集合的_id的索引重复了。

我们在试试使用save 命令:
db.msg.save({_id:1,from:"lisi",to:"zhangsan",msg:"hello,zhangsan!",time:"1373615052442"})
没有错误信息,然后使用find命令查询msg集合中的数据:

我们可以看出,之前保存的信息被修改了,也就是insert命令是插入操作,id重复时会报错。save命令是saveOrUpdate的意思,id重复时会更新。
6、find命令
一般数据库的查询是最常用也最复杂的,MongoDB也不例外,我们来看看一些例子:
6.1最简单的查询
db.users.find()
这是系统测试时的部分数据,因为隐私的问题,屏蔽了一些信息,仅供演示。
上面的命令会自动显示数据集合中前20条数据。使用it命令,会将游标指向下20条数据。
6.2 带简单参数的查询:
我们来查询上面表中的系统管理员,他的"userId"是USER0000000000000000000000000001。
使用如下命令:
db.users.find({"userId" : "USER0000000000000000000000000001"});
从下面的图中我们可以看见,用户编号为USER0000000000000000000000000001的“系统管理员”被我们查出来了。

6.3多个参数的查询:
6.3.1 or
比如我们要查“国际注册处”或者“异议裁定一处”的所有用户,使用类似于SQL中的or:
db.users.find({$or:[{orgName:"国际注册处"},{orgName:"异议裁定一处"}]})
我们可以看见,测试数据中的四个操作者被查出来了。
6.3.2 and
用法类似于or,我们使用如下命令来查询异议裁定一处的名为欧阳XX的用户
db.users.find({$and:[{userName:"欧阳XX"},{orgName:"异议裁定一处"}]})
下图是结果:
6.4操作符
查找用户编码大于00003198的所有用户:
使用$gt是大于的意思
db.users.find({userId:{$gt:"00003198"}})
如下结果:
编号大于00003198的所有用户被查出来了:
此外类似的操作符还有:$gte是≥、 $lt是<、$lte是≤,$ne是!=
如:
> db.msg.find({_id:{$ne:2}})
以此类推,不再逐一赘述。
7、count命令
对一个查询进行计数:
> db.users.find({userId:{$gt:"00003198"}}).count()
显示这个查询的结果是7条。

同时也可以使用:
db.users.count({userId:{$gt:"00003198"}})
两种方式结果相同:
8、sort命令:
语法:query.sort({字段A:-1/1})
将一个查询使用字段A的降序、升序排列:
db.users.find({userId:{$gt:"00003198"}}).sort({userId:1})
db.users.find({userId:{$gt:"00003198"}}).sort({userId:-1})
下图是两种操作的结果:

主要的命令就介绍这么多,其他的update、remove、skip、limit命令大多类似于find或相对比较简单。下面我们说说在Java中使用这些命令。
Java中使用MongoDB
Java使用MongoDB非常方便,下面是简单的步骤。
1、官网下载驱动,我们使用的是mongo-java-driver-2.9.3.jar
2、获取数据库连接实例
public static void initDB(){
try {
InputStream bin = Object.class.getResourceAsStream("/db.properties");
p.load(bin);
mongo = new Mongo(p.getProperty("MONGO_IP"),Integer.parseInt(p.getProperty("MONGO_PORT")));
mongo.getMongoOptions().connectionsPerHost = Integer.parseInt(p.getProperty("MAX_SIZE"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bin != null){
bin.close();
}
}
}
3、获取DBCollection数据集合
DBCollection msgCol = mongo.getDB(p.getProperty("DB_NAME")).getCollection("msg");
DBCollection userCol = mongo.getDB(p.getProperty("DB_NAME")).getCollection("users");
4、演示一个save的方法
public void saveMsg(Msg msg){
if(msg == null){
return;
}
DBObject obj = new BasicDBObject();
obj.put("from", msg.from);
obj.put("to", msg.to);
obj.put("time", Long.parseLong(msg.time));
obj.put("toName", msg.toName);
obj.put("msg", msg.msg);
obj.put("userId", msg.userId);
obj.put("userName", msg.userName);
obj.put("orgId", msg.orgId);
obj.put("orgName", msg.orgName);
obj.put("type", msg.type);
msgCol.save(obj);
}
备注:如果要指定id,可以使用ObjectId对象
5、演示一个使用or操作符的查询:
@SuppressWarnings("unchecked")
public String getChatLog(Msg msg) {
Map<String, Object> map = (Map<String, Object>)JSON.parse(msg.data);
BasicDBList list = new BasicDBList();
//out
DBObject out = new BasicDBObject("to", map.get("targetId"));
out.put("from", msg.from);
list.add(out);
//in
DBObject in = new BasicDBObject("from", map.get("targetId"));
in.put("to", msg.from);
list.add(in);
DBObject query = new BasicDBObject("$or", list);
DBCursor cursor = msgCol.find(query).skip(Integer.parseInt(map.get("skip").toString())).limit(Integer.parseInt(map.get("limit").toString()));
DBObject each;
StringBuffer sb = new StringBuffer("[");
while(cursor.hasNext()){
each = cursor.next();
//DBobject是一个类似于map的东西,可以在这里get出来,然后处理业务逻辑
...Code...
}
其他的方法类似于上面的操作。
写在最后:
以上只是一个入门吧,其实MongoDB的Map-Reduce和aggregate运算比较强大,适合进行大数据量的运算,以后有时间看看。
mongDB基本命令和Java操作MongoDB的更多相关文章
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
- JAVA操作MongoDB数据库
1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...
- [转]MongoDB for Java】Java操作MongoDB
原文地址: MongoDB for Java]Java操作MongoDB 开发环境: System:Windows IDE:eclipse.MyEclipse 8 Database:mongoDB 开 ...
- Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html 介绍到了在MongoDB的控制台完成MongoDB的数据操作,通 ...
- Mongodb快速入门之使用Java操作Mongodb
[IT168 专稿]在上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作. HelloWorld程序 学习任何程序的第一步,都是编 ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- 浅谈如何用Java操作MongoDB
NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...
- java操作mongodb(连接池)(转)
原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接.我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置.因为Mong ...
- Java操作Mongodb(转载)
好文章,值得收藏 HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mo ...
随机推荐
- whoosh使用笔记
1. whoosh安装 pip install Whoosh 2. 添加索引 第一步:生成schema 第二步:根据schema生成index.index就是一个目录中的一堆文件 (针对某个目录,调 ...
- odoo 清除所有运行数据
测试odoo,如果需要一个干净的db.经常需要清除掉所有业务数据.做如下操作,较为方便 1:建立一个服务器动作,动作的python代码入下. 然后新建一个菜单,菜单动作关联到 这个动作.需要清空db, ...
- Win7 + VS2015 + CMake3.6.1-GUI编译库
CMake生成Unicode版本VC工程 Just add this line in your top CMakeLists.txt file: add_definitions(-DUNICO ...
- C#中的委托事件的分析
推荐:http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html 委托和事件在 .NET Framework 中的应用非常广泛,然而, ...
- Manacher 算法-----o(n)回文串算法
回文的含义是:正着看和倒着看相同,如abba和yyxyy Manacher算法基本要点:用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插 ...
- 【技术贴】jsp出现getOutputStream() has already been calle
此错误经常在websphere6.x版本里出现:原因是jsp文件中的尖括号百分号里面有空行或者其他的什么原因,Servlet1.2规范规定了OutputStream只能获得一次,在jsp中实际上已经通 ...
- 【2011 Greater New York Regional 】Problem B The Rascal Triangle
一个简单的规律题,每一列都是一个等差数列: 代码: #include<cstdio> #define ll long long using namespace std; int main( ...
- 基于Visual C++6.0的DLL编程实现
整理自基于Visual C++6.0的DLL编程实现 本文通过通俗易懂的方式,全面介绍了动态链接库的概念.动态链接库的创建和动态链接库的链接,并给出个简单明了的例子,相信读者看了本文后,能够创建自己的 ...
- Java 8 的 JVM 有多快?Fork-Join 性能基准测试
Java 8 已经发布一段时间了,许多开发者已经开始使用 Java 8.本文也将讨论最新发布在 JDK 中的并发功能更新.事实上,JDK 中已经有多处java.util.concurrent 改动,但 ...
- 【HDOJ】2851 Lode Runner
开始没理解题意.原来destinations是指路的序号.而不是点.DP. #include <stdio.h> #include <string.h> ]; typedef ...