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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?