|
MongoDB是一个高性能,开源,无模式的文档型数据库,它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,是当前NoSQL数据库中比较热门的一种。
MongoDB使用C++开发。不支持SQL,但有自己功能强大的查询语法。MongoDB使用BSON作为数据存储和传输的格式。
BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。MongoDB很像MySQL,collection对应MySQL的table,document对应MySQL的row。
官方网站:http://www.mongodb.org/
官方给自己的定义是Key-value存储(高性能和高扩展)和传统RDBMS(丰富的查询和功能)之间的一座桥梁。
-----------------------------------------------------------------
一、MongoDB存取原理:
内部执行引擎为JS解释器(解释符合JS语法的语句):
插入操作:把JSON对象数据存储成BSON结构的文档结构,
查询操作:把BSON结构数据转换为JSON对象.
二、MongoDB和关系型数据库区别
三、MongoDB下载/安装/配置/启动/连接
官方网站:http://www.mongodb.org/
-----------------------------------------------------
安装步骤:
步骤1:
压缩版本:mongodb-win32-x86_64-2008plus-ssl-3.0.2.zip(不建议使用,容易报错:计算机中丢失libeay32.dll)
安装版本:mongodb-win32-x86_64-2008plus-ssl-3.0.2-signed.msi(安装版自带有libeay32.dll文件)
步骤2:
将MongoDB的bin目录配置PATH环境变量中,方便快速使用其命令。
------------------------------------------------------
查阅帮助文档:
一:启动MongoDB服务(端口默认为27017)。
1:配置MongoDB数据存放位置
mongod --dbpath H:\MongoDB\data
2:重定向日志输出到日志文件(日志默认输出到控制台中)。
mongod --dbpath H:\MongoDB\data --logpath H:\MongoDB\logs.txt
二:连接MongoDB.
1:最简单的连接(默认连接到本机的test数据库).
mongo 127.0.0.1:27017/test
简写: mongo
2:连接到指定IP指定数据库中.
mongo IP:端口/test
三:基本操作命令.
1:查询所有的数据库
show dbs
2:使用指定的数据库
use databaseName
3:查询当前数据库中所有的集合(表)
show collections
四:MongoDB客户端工具-MongoVUE.
-------------------------------------------------------------
显示创建collection:
db.createCollection(‘collectionName’)
隐式创建collection(插入数据前创建):
db.collectionName.insert(document);
删除collection:
db.collectionName.drop() ,
删除database:
db.dropDatabase();
统计Collection中文档数量:
db.collectionName.count();
四、MongoDB的CRUD操作
插入数据操作:
语法: db.collectionName.insert(document);
注意: mongodb存储的是文档, 文档是json格式的对象。
比如操作user集合(表).
-------------------------------------------------------------------------
1: 增加单个文档。
db.user.insert({name:"will",age:17});
2: 增加单个文档,并指定_id。
db.user.insert({_id:22,name:"will",age:17,gender:"boy",email:"will@itsource.cn"});
3: 增加多个文档。
db.user.insert([
{name:"张三",age:17},
{name:"李四",age:18},
{name:"王五",age:19}
]);
删除操作:
语法: db.collectionName.remove(查询表达式, 是否删除多条选项);
选项是指 {justOne:true/false},是否只删一行, 默认为false.
比如操作user集合(表).
-------------------------------------------------------------------------
注意:
1: 查询表达式依然是个json对象
2: 查询表达式匹配的行,将被删掉.
3: 如果不写查询表达式,collections中的所有文档将被删掉.
------------------------------------------------------------------------- 1:删除user集合中_id属性值为9527的文档 。
db.user.remove({_id:9527});
2:删除user集合中gender属性为boy的文档(默认删除多条数据)。
db.user.remove({gender:"boy"});
3:删除user集合中gender属性为girl的文档,只删除1行。
db.user.remove({gender:"boy"},true);
更新操作:
语法: db.collectionName.update(查询条件,更新的数据,是否修改多条);
比如操作user集合(表).
-------------------------------------------------------------------------
1:修改user集合中name为张三改成小王。
db.user.update({name:"张三"},{name:"西门吹雪"});
此时出现:其他的属性全部消失.
db.user.update({name:"李四"},{$set:{name:"西门吹雪"}});
2:修改user集合中所有name为孙2的年龄修改为22岁。
db.user.update({name:"孙2"},{$set:{age:99}},{multi:true});
查询操作:
语法: db.collectionName.find(查询表达式,查询的列);
比如操作user集合(表).
-------------------------------------------------------------------------
1:查询所有user集合中文档的数据。
db.user.find();
2:查询user集合中所有的gender属性 (_id属性默认总是查出来)。
db.user.find({},{gender:true});
3:查询user集合中所有的gender属性,且不查询_id属性。
db.user.find({},{_id:false,gender:true});
4:查询user集合中所有gender属性值为boy的文档中的name属性。
db.user.find({gender:"boy"},{_id:false,name:true});
5:查询user集合中所有gender属性值为boy并且年龄大于等于17的文档中的name属性。
db.user.find({gender:"boy",age:{$gte:17}},{_id:false,name:true,age:true});
五、Java中使用MongoDB
相关jar:mongo-java-driver-3.0.0.jar
package com.mongodb;
import java.util.HashMap;
import java.util.Map;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
public>
public static void main(String[] args)
{
TestMongoDB test = new TestMongoDB();
//插入数据
test.insertData();
//查询数据
test.find();
test.findone();
//更新数据
test.update();
//删除数据
test.delete();
}
public void find()
{
//创建连接客户端
MongoClient client = new MongoClient("localhost",27017);
//获取数据库对象
MongoDatabase db = client.getDatabase("test");
//获取操作的集合对象
MongoCollection<Document> collection = db.getCollection("wjy");
//具体操作
FindIterable<Document> it = collection.find();
//获取游标对象
MongoCursor<Document> cursor = it.iterator();
while (cursor.hasNext())
{
//取出每一个文档对象(行)
Document doc = cursor.next();
String name = doc.getString("name");
if ("乔峰".equals(name))
{
Integer age = doc.getInteger("age");
System.out.println(name+","+age);
}
else
{
Double age = doc.getDouble("age");
System.out.println(name+","+age);
}
}
//释放资源
cursor.close();
client.close();
}
public void findone()
{
MongoClient client = new MongoClient("localhost",27017);
//获取数据库对象
MongoDatabase db = client.getDatabase("test");
//获取操作的集合对象
MongoCollection<Document> collection = db.getCollection("wjy");
//具体操作
Bson filter = new BasicDBObject("_id", new ObjectId("5850eacd7065f52b0eab7ff4"));
FindIterable<Document> it = collection.find(filter);
//获取游标对象
MongoCursor<Document> cursor = it.iterator();
while (cursor.hasNext())
{
//取出每一个文档对象(行)
Document doc = cursor.next();
String name = doc.getString("name");
if ("乔峰".equals(name))
{
Integer age = doc.getInteger("age");
System.out.println(name+","+age);
}
else
{
Double age = doc.getDouble("age");
System.out.println(name+","+age);
}
}
//释放资源
cursor.close();
client.close();
}
public void insertData()
{
MongoClient client = new MongoClient("localhost",27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("wjy");
//使用Map来封装json数据
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "乔峰");
map.put("age", 35);
map.put("gender", "true man");
Map<String,Object> hobbyMap = new HashMap<String,Object>();
hobbyMap.put("girl", "阿朱");
hobbyMap.put("gongfu", "降龙十八掌");
map.put("hobby", hobbyMap);
Document doc = new Document(map);
collection.insertOne(doc);
client.close();
}
public void update()
{
MongoClient client = new MongoClient("localhost",27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("wjy");
Bson filter = new BasicDBObject("_id",new ObjectId("5850eacd7065f52b0eab7ff4"));
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "张无忌");
map.put("age", 35);
Bson update = new BasicDBObject(map);
collection.updateOne(filter, new BasicDBObject("$set",update));
client.close();
}
public void delete()
{
MongoClient client = new MongoClient("localhost",27017);
MongoDatabase db = client.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("wjy");
collection.deleteOne(new BasicDBObject("_id",new ObjectId("5850eacd7065f52b0eab7ff4")));
client.close();
}
}
参考:http://www.icoolxue.com/album/affix/view/mongodb/1/12?orderBy=create_time |
|