初试MongoDB

1. MongoDB数据库简介

2. MongoDB安装

3. MongoDB控制台简介

4. 如何向数据库插入数据?

5.  如何查询数据库?

6. java操作数据库示例

7. 代码下载 

1.MongoDB数据库简介

 分布式的CAP理论告诉我们,一个分布式系统不可能同时满足一致性,可用性和分区容错性,最多只能满足其中的两个。关系型数据库通过把更新操作写到事务型日志里实现了部分耐用性,但带来的是写性能的下降。MongoDB(不仅仅sql)数据库通过降低一些特性来达到高性能的需求。MongoDB取自“humongous”,是一种开源文档数据库。MongoDB是一种面向集合(collection)的,模式自由的数据库。

通过和常规的sql数据库(sql server,oracle等)的比较来认识nosql数据库的一些概念。MongoDB中同样包含数据库的概念,数据库之下是称之为collection的集合对象,collection对象大致上类似于传统数据库中的表,collection之下就是“文档对象”,大致上相反与传统数据库的record。但是需要注意的是数据库和collections集合的创建都是lazy的,也就是说只有在向集合中实际插入数据时,集合和数据库文件才真正创建。

  

2. MongoDB安装

我是用的测试平台环境如下:

1. vmware虚拟机

2. ubuntu 10.04 

MongoDB在ubuntu下的安装还是比较简单的。命令如下:

xuqiang@ubuntu:~/mongodb$ curl http://downloads.mongodb.org/linux/mongodb-linux-i686-1.6.4.tgz > mongo.tgz
xuqiang@ubuntu:~/mongodb$ tar xzf mongo.tgz

进入刚刚解压的目录中:

xuqiang@ubuntu:~/mongodb$ cd mongodb-linux-i686-1.6.4/

该目录下文件如下: 

 

xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4$ ls
bin  GNU-AGPL-3.0  README  THIRD-PARTY-NOTICES

下面开始设置数据库文件存储文件夹。默认会在/data/db/存储数据库文件,所以首先建立该目录:

xuqiang@ubuntu:~$ sudo mkdir -p /data/db/

改变该目录的权限:

xuqiang@ubuntu:~$ sudo chown `id -u` /data/db

准备好文件目录之后,启动服务器,进入bin目录下:

xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4$ cd bin
xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4/bin$ ls
bsondump  mongod     mongoexport  mongoimport   mongos      mongostat
mongo     mongodump  mongofiles   mongorestore  mongosniff
使用超级用户启动服务器: 

xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4/bin$ sudo ./mongod

mongod     mongodump
xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4/bin$ sudo ./mongod

输出如下:

 ./mongod --help for help and startup options

Sun Mar 27 04:26:17 MongoDB starting : pid=6289 port= 27017 dbpath= /data/db/ 32-bit
** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Sun Mar 27 04:26:17 db version v1.6.4, pdfile version 4.5
Sun Mar 27 04:26:17 git version: 4f5c02f8d92ff213b71b88f5eb643b7f62b50abc
Sun Mar 27 04:26:17 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
Sun Mar 27 04:26:17 [initandlisten] waiting for connections on port 27017
Sun Mar 27 04:26:18 [websvr] web admin interface listening on port 28017

通过上面的查看可以看到当前服务器在27017端口上监听,同时数据库文件是存储在/data/db/下的。当然如果不想在命令行键入文件的全路径,可以将上面的路径添加到环境变量中,或者是将这几个bin下的文件全部拷贝到/usr/bin/下。服务器启动起来之后,我们来启动客户端程序:

重新打开一个bash console,命令: 

 xuqiang@ubuntu:~/mongodb$ mongo

输出: 

MongoDB shell version: 1.6.4

connecting to: test
>
到目前服务器已经启动起来,同时我们通过客户端和服务器端成功连接。呵呵,是不是比较激动,下面是一个简单的测试:

> db.foo.save( { a : 2 } );

> db.foo.find();
{ "_id" : ObjectId("4d8f216819225380327a66ae"), "a" : 2 }

 

需要注意的是foo集合如果test数据库中不存在,那么将自动创建。 

3. MongoDB控制台简介

 MongoDB采用的javascript式的交互控制台,可以从中直接操作数据库。在其中键入help可以查看常见的帮助主题,然后进入具体的帮助主题中。通过help命令能够对MongoDB命令行有个初步认识。js的控制台中有命令记忆的功能,可以通过上下箭头来查看先前键入的命令。

 > help

        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        rs.help()                    help on replica set methods
        help connect                 connecting to a db help
        help admin                   administrative help
        help misc                    misc things to know
        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time>= 1ms
        use <db_name>                set current database
        db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to furtheriterate
        exit                         quit the mongo shell

4.  如何向数据库中插入数据

下面的测试是在mydb中进行,首先进行数据库切换:

 > use mydb

switched to db mydb

4.1 插入命令结构如下:

 

4.2 示例 (http://www.mongodb.org/display/DOCS/Tutorial#): 

> j = { name : "mongo" };
{"name" : "mongo"}
> t = { x : 3 };
{ "x" : 3  }
> db.things.save(j);
> db.things.save(t);
> db.things.find();
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }

5. 如何查询数据库 ?

5.1 查询基本结构:

 

5.2 使用游标?

 > var cursor = db.things.find();                                                       

> while (cursor.hasNext()) printjson(cursor.next());

其中printjson是内置函数。

5.3 如何增加查询条件?

> db.things.find({name:"mongo"}).forEach(printjson);
{ "_id" : ObjectId("4d8de0a325a9112df63a8c62"), "name" : "mongo" }

上面的查询等价的sql如下:

 SELECT * FROM things WHERE name="mongo"

5.4 如何仅仅返回特定的列?

> db.things.find({x:4}, {j:true}).forEach(printjson);
{ "_id" : ObjectId("4d8de13a25a9112df63a8c64"), "j" : 0 }

显然上面仅仅返回了j这一列。

5.5 如何限制返回查询的条目数量(分页中使用)?

> db.things.find().limit(3);
{ "_id" : ObjectId("4d8de0a325a9112df63a8c62"), "name" : "mongo" }
{ "_id" : ObjectId("4d8de0c625a9112df63a8c63"), "x" : 3 }
{ "_id" : ObjectId("4d8de13a25a9112df63a8c64"), "x" : 4, "j" : 0 }

6.java操作数据库示例?


 import java.util.Set;

import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
public class QuickTour {
public static void main(String[] args) {
try {
System.out.println("connect to server ...");
// server, port
Mongo m = new Mongo( "localhost" , 27017 );
DB db = m.getDB( "mydb" );
// get the collections 
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
     System.out.println(s);
}
// insert into the db
// make a new collection
DBCollection coll = db.getCollection("testCollection");
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
       doc.put("type", "database");
       doc.put("count", 1);
       
       coll.insert(doc);
       
// search db
       DBObject myDoc = coll.findOne();
       System.out.println(myDoc);
       
       // use cursor to retrive data
       DBCursor cur = coll.find();
       
       while(cur.hasNext()) {
           System.out.println(cur.next());
       }
}
catch(Exception e) {
System.out.println(e.toString());
}
}
}

7. 代码下载 

/Files/xuqiang/nosql/MongoDBTest.rar 

转载于:https://www.cnblogs.com/xuqiang/archive/2011/03/27/1997158.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值