小试MongoDB及Java的CRUD

最近刚做好一个站,基于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


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值