设为首页 收藏本站
查看: 1236|回复: 0

[经验分享] 小试MongoDB及Java的CRUD

[复制链接]

尚未签到

发表于 2015-7-6 09:52:58 | 显示全部楼层 |阅读模式
  最近刚做好一个站,基于rails 3,教程为主,大家捧场看看,谢谢!www.yo945.com
  看过JavaEye的Robbin的《NoSQL数据库探讨之一 - 为什么要用非关系数据库?》后,才知道,原来世界上还有这样的一种数据库,并深深的为其性能着迷。不过非关系数据库的成熟程序毕竟还不能和传统的关系数据库比,实在是不敢在实际工程中使用。
  最近在想大量测试数据如何存放的时候,突然觉得非关系数据库非常合适,又查了一下,发现原来非关系数据库已经挺成熟了,很大国际性的大网站也开始运用,而我想存储的大量数据,非常的对应KEY-VALUE这样的结构。想用就学一下吧,经过比对后,我选择了MongoDB。
  去官方网站下载了程序,“绿色”的,通过命令行直接运行BIN下面的服务器mongod.exe即可,不过默认的数据库位置在C盘下,这总是不大合适,可以通过加参数 -dbpath来改变,如
  mongod.exe –dbpath d:/db
  注意这里有个问题,Windows下,一般是使用\作为路径分隔符的,不过在这里,如果直接使用d:\db这样的话,mongod会把\去掉,变成d:db这样,导致启动失败,所以比较简单的方法就是用/来代替\
  服务器启动后,可以在浏览器中访问,默认地址是:http://127.0.0.1:28017/,里面会有一些数据库的基本信息
  访问数据库可以使用BIN下面的mongo.exe,是个命令行工具。对于用惯了MS-SQL,MySQL这样有良好的数据库UI工具的我来说,让我直接用命令行去操作数据库实在是有些不习惯,在网上查了一下,UI工具有倒是有,不过都不大完善的样子,也就懒得下了。在命令行下,输入help可以看到基本操作命令:
  show dbs:显示数据库列表   
show collections:显示当前数据库中的集合(类似关系数据库中的表)     
show users:显示用户
  use :切换当前数据库,这和MS-SQL里面的意思一样   
db.help():显示数据库操作命令,里面有很多的命令     
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令     
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)     
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
  ------------------------------------------------
  大致的说明一下MongoDB中的数据格式,我没有去详细的查看官方的文档,只是按我试用过的感觉来说,其数据结构,类似JSON,即key-value成对,key一般就是String,而value而无所谓了,如一个JSON数据:
  {   
     name:"凤姐",     
     birthday:{     
        year:1987,     
        month:1,     
        day:20  
     }     
}
  只要你愿意,就可以把Value不断的复杂化,以方便存储数据
  -----------------------------------------------------------
  要使用Java操作MongoDB的话,要到官方网站下载一个驱动包,点击网站上的Drivers里面,可以看到目前支持的语言,非常的多……把包导入后,可以尝试来操作了(记得一定要开着服务器)
  首先介绍一下比较常用的几个类
  Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等
  DB:对应一个数据库,可以用来建立集合等操作
  DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等
  DBObject接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,因为是key-value的数据结构,所以用起来其实和HashMap是基本一致的
  DBCursor:用来遍历取得的数据,实现了Iterable和Iterator
  接下来实际的操作一下,代码如下:

import com.mongodb.*;
public class Main {
public static void main(String[] args) {
try{
Mongo m = new Mongo("127.0.0.1");
//选择数据库,如果没有这个数据库的话,会自动建立
DB db = m.getDB("mongo");
//列出所有数据库名,不过发现,如果数据库里面是没有数据的话,并不会被列出来
System.out.println("数据库列表:"+m.getDatabaseNames());
//建立一个集合,和数据库一样,如果没有,会自动建立
DBCollection col = db.getCollection("col");
//列出所有集合名,和数据库一样,如果集合里面是没有数据的话,并不会被列出来
System.out.println("当前数据库下的集合列表:"+db.getCollectionNames());
//建立一个数据项,重复执行会多次添加一样的数据
BasicDBObject val = new BasicDBObject();
val.put("name", "凤姐");
col.save(val);
//保存的数据为
//{ "_id" : "4b8de2f3053068a371e870c0" , "name" : "凤姐"}
//_id是系统自动帮加上的,全局唯一
//多次加入一样的数据时,_id都是不一样的
//取得所有数据并打印出来
DBCursor ite = col.find();
while(ite.hasNext())
{
System.out.println(ite.next());
}
}catch(Exception error)
{
error.printStackTrace();
}
}
}
  
  ----------------------------更新操作--------------------------

import com.mongodb.*;
public class Main {
public static void main(String[] args) {
try{
Mongo m = new Mongo("127.0.0.1");
DB db = m.getDB("mongo");
DBCollection col = db.getCollection("col");
System.out.println("修改前:");
showData(col);
//查找所有 name=凤姐 的项,并更新
BasicDBObject old_val = new BasicDBObject(),new_val = new BasicDBObject();
old_val.put("name", "凤姐无敌");
new_val.put("name", "凤姐无敌");
col.update(old_val, new_val);//只会更新一个
//col.updateMulti(new_val, old_val)不知道怎么回事,这函数不顶用
System.out.println("修改后:");
showData(col);
}catch(Exception error)
{
error.printStackTrace();
}
}
static void showData(DBCollection col)
{
DBCursor ite = col.find();
while(ite.hasNext())
{
System.out.println(ite.next());
}
}
}

Technorati 标签: MongoDB,java

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83721-1-1.html 上篇帖子: MongoDB分片实战(一):集群搭建 下篇帖子: windows系统安装MongoDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表