文章转发至:http://blog.sina.com.cn/s/blog_7f033dcf0101nhqp.html
一、是什么?
答:
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
二、有什么用?
答:
MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling.
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
- 面向集合存储,易存储对象类型的数据。
- 模式自由。
- 支持动态查询。
- 支持完全索引,包含内部对象。
- 支持查询。
- 支持复制和故障恢复。
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
- 自动处理碎片,以支持云计算层次的扩展性。
- 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
- 文件存储格式为BSON(一种JSON的扩展)。
- 可通过网络访问。
三、怎么用?
我的环境是win7
所以安装,
Important:If you are running any edition of Windows Server 2008 R2 or Windows 7, please install a hotfix to resolve an issue with memory mapped files on Windows.
假如你的环境是以上windows版本则应该安装补丁程序,猛击:http://support.microsoft.com/kb/2731284
具体安装
1.解压mongodb-win32-i386-2.4.8.zip ,创建路径C:\Program Files\mongodb(可以不在C盘) ,将解压后的整个bin文件复制在此文件夹下。
2.C:\Program Files\mongodb 下建立Data文件夹 C:\Program Files\mongodb\data ,然后分别建立db,log两个文件夹,至此mongodb下有以下文件夹
C:\Program Files\mongodb\bin
C:\Program Files\mongodb\data\db
C:\Program Files\mongodb\data\log
在log文件夹下创建一个日志文件MongoDB.log,即C:\Program Files\mongodb\data\log\MongoDB.log
完成以上工作后,你为奇怪为什么要建立这些文件夹(因为,Mongodb安装需要这些文件夹,默认安装是不用创建,但是文件都为安装到C:\data\下)
3. 运行cmd.exe 进入DOS命中界面
> cd C:\Program Files\mongodb\bin
> C:\Program Files\mongodb\bin>mongod -dbpath "C:\Program Files\mongodb\data\db"
执行此命令即将mongodb的数据库文件创建到C:\Program Files\mongodb\data\db 目录,等待一会儿后不出意外已经初步安装成功。
然后再执行
> cd C:\Program Files\mongodb\bin
> C:\Program Files\mongodb\bin>mongod --dbpath "C:\Program Files\mongodb\data\db" --logpath "C:\Program Files\mongodb\data\log\MongoDB.log" --install --serviceName "MongoDB"
此时将为系统创建名为MongoDB的服务,也即以后一般开机系统会自动启动MongoDB了。
重启电脑完成安装。
类比:
练习:
mongo.exe
控制台中的CRUD:
查:
db.users.find() 等价以前的 SELECT * FROM users
db.users.find( { }, { user_id: 1, status: 1 })等价 SELECT id, user_id, status FROM users
db.users.find( { status: "A" },{ user_id: 1, status: 1, _id: 0 })等价SELECT user_id, status FROM usersWHERE status = "A"
db.users.find( { $or: [ { status: "A" } , { age: 50 } ] })等价SELECT * FROM users WHERE status = "A" OR age = 50
db.users.find( { age: { $gt: 25, $lte: 50 } }) 等价 SELECT * FROM users WHERE age > 25 AND age <= 50
db.users.find( { status: /A/ } ).sort( { user_id: 1 } ) 等价 SELECT * FROM users WHERE status like "%A%" ORDER BY user_id ASC
db.users.find().count()
等价SELECT COUNT(*) FROM users
改:
db.users.update({ age: { $gt: 25 } },{ $set: { status: "C" } },{ multi: true }) 等价 UPDATE usersSET status = "C" WHERE age > 25
删:
db.users.remove( { status: "D" } 等价 DELETE FROM users WHERE status = "D"
增(若集合(表)不存在则自动创建users集合(表)):
db.users.insert( {user_id: "bcd001",age: 45,status: "A"} ) 等价 INSERT INTO users(user_id, age,status) VALUES ("bcd001",45,"A")
为数据库添加用户:
use users
db.addUser( { user: "toni",
pwd: "toni",
roles: [ "readWrite", "dbAdmin" ]
} )
通过java连接MongoDB(不好意思我的编程母语是java - -!):
First, be sure to include the driver jar mongo.jar in your classpath
前提,需要引入mongo.jar包,
创建连接
// Mongo(p1, p2):p1表示IP地址,p2表示端口
Mongo m = new Mongo("127.0.0.1", 27017);
// 根据mongodb数据库的名称获取mongodb对象
DB db = m.getDB("users");
// 校验用户密码是否正确
if (!db.authenticate("toni", "toni".toCharArray())) {
System.out.println("连接MongoDB数据库,校验失败!");
} else {
System.out.println("连接MongoDB数据库,校验成功!");
}
关闭连接:
db.requestDone();
m.close();
插入数据:
DBCollection dbCol = db.getCollection("myCol");
System.out.println("向数据集中插入数据开始:");
List dbList = new ArrayList();
BasicDBObject doc1 = new BasicDBObject();
doc1.put("name", "荣荣");
doc1.put("age", 77);
doc1.put("address", "深圳");
dbList.add(doc1);
dbCol.insert(dbList);
System.out.println("向数据集中插入数据完成!");
删除数据:
DBCollection dbCol = db.getCollection("myCol");
System.out.println("删除【荣荣】!");
BasicDBObject doc = new BasicDBObject();
doc.put("name", "荣荣");
dbCol.remove(doc);//把名字等于荣荣的都删掉
修改数据:
DBCollection dbCol = db.getCollection("myCol");
DBCursor ret = dbCol.find();
BasicDBObject doc = new BasicDBObject();
BasicDBObject res = new BasicDBObject();
res.put("age", 24);
System.out.println("将数据集中的所有文档的age修改成24!");
doc.put("$set", res);
dbCol.update(new BasicDBObject(), doc, false, true);
System.out.println("更新数据完成!");
查找数据:
DBCollection dbCol = db.getCollection("myCol");
DBCursor ret = dbCol.find();
System.out.println("从数据集中读取数据:");
while (ret.hasNext()) {
BasicDBObject bdbObj = (BasicDBObject) ret.next();
if (bdbObj != null) {
System.out.println("name:" + bdbObj.getString("name"));
System.out.println("age:" + bdbObj.getInt("age"));
System.out.println("address:" + bdbObj.getString("address"));
}
}