NOSql :not only sql
显示开发中一直存在一个问题:
数据表 — JDBC读取 — POJO(VO/PO) — 控制层转化为JSON数据 — 客户端这样的转换实在是太麻烦了。最好的是直接有一个数据库就存放要显示的JSON数据,就省去了所有要转换的过程。
所以在实际的开发中,往往除了关系型数据库之外还要提供NOSql数据库,其中NOSql数据库负责数据的读取,因为直接保存的就是JSON(前提是:MongoDB中的数据是排列好的组合 数据)
在MongoDB数据库中与Oracle数据库有如下的概念对应:

MongoDB之所以能够更好的发展也取决于:面向集合的存储过程、模式自由(无模式)、方便的进行数据的存储扩充。支持索引、支持短暂数据保留、具备完整的数据库状态监控、基于BSON应用。
安装和配置:
https://www.mongodb.com/
配置环境变量
- 启动:
mongod --dbpath /Users/xuchun/Downloads/mongodb-osx-x86_64-4.0.4/db (普通启动)
mongod --dbpath /Users/xuchun/Downloads/mongodb-osx-x86_64-4.0.4/db —port=27001(带端口号启动)
mongod -f /Users/xuchun/Downloads/mongodb-osx-x86_64-4.0.4/mongodb.conf (配置文件启动)
- 连接:mongo
- 查询所有数据库:show databases
- 切换到admin数据库:use admin
- 关闭数据库服务:shutdownServer()
基础操作:
- 使用mldn数据库 : use mldn
这个时候并不会创建数据库,只有在数据库中保存数据集合之后才能真正创建数据库
- 创建集合(表):db.createCollection('emp') //创建一张emp名称的表 这个时候mldn数据库才会真正的存在
- 如果按照以上代码形式进行,会觉得你不正常。。。一般使用时都会直接向里面保存一个数据。
- 创建集合(表)并插入一条数据: db.dept.insert({‘deptno’:10,’dname’:’xc’,’loc’:’北京’})
输出结果:WriteResult({ "nInserted" : 1 })
再查询这张表:db.dept.find()
输出结果:{ "_id" : ObjectId("5be8eab516d1fcb72bc0dd34"), "deptno" : 10, "dname" : "xc", "loc" : "北京" }
- 查看所有集合(表):show collections
- 查询集合中数据:db.表名.find()
从传统数据表来(集合就相当于表的结构),表的结构一旦定义就必须按照其定义的要求进行内容的编写,mongodb不一样,可以自己随意扩充数据。
- 增加不规则数据 :比如dept表结构不算_id有3个字段,那么我们多存入字段来看一下:
var deptData = {
'deptno':11,
'dname':'杭州',
'loc':'杭州',
'count':199
}
db.dept.insert(deptData)//输出:WriteResult({ "nInserted" : 1 })
db.dept.find()
输出:
{ "_id" : ObjectId("5be8eab516d1fcb72bc0dd34"), "deptno" : 10, "dname" : "xc", "loc" : "北京" }
{ "_id" : ObjectId("5be8eccb16d1fcb72bc0dd35") }
{ "_id" : ObjectId("5be8edfd16d1fcb72bc0dd36"), "deptno" : 11, "dname" : "杭州", "loc" : "杭州", "count" : 199 }
数据插入成功,即使表结构改变了。
所以mongodb数据库绝对不可能存在查询集合结构的操作,因为它无模式!
插入数组:
db.infos.insert([{"url" : "www.baidu.com"},{"url" : "www.hh.cn"}])
如果保存10000个数据?就是用js语法!非常好用
for(var i = 0;i<10000; i++){
db.infos.insert({‘url’ : ‘http://www.yyy.com’+i})
}
如果数据保存很多的情况下,列表查询完展示时不会全部列出,只会列出部分内容,传统数据库会全部列出。。。
- 关于ID的问题
每一行数据会自动生成_id,值组成结构:时间戳+机器码+PID+计数器 值绝对不会重复。是mongdb数据库自己生成的,不可被改变。
- 删除数据:
db.dept.remove({"_id" : ObjectId("5be8eab516d1fcb72bc0dd34")}) 输出:WriteResult({ "nRemoved" : 1 })
db.dept.find() 输出:{ "_id" : ObjectId("5be8eccb16d1fcb72bc0dd35") }
{ "_id" : ObjectId("5be8edfd16d1fcb72bc0dd36"), "deptno" : 11, "dname" : "杭州", "loc" : "杭州", "count" : 199 }
- 更新数据:db.dept.update(更新的那一条,更新的内容)
例子:
var deptData = {
'deptno':11,
'dname':'杭州',
'loc':'杭州',
'count':199
}
db.dept.update({"_id" : ObjectId("5be8eab516d1fcb72bc0dd34”}, deptData)
可以看出更新功能比较麻烦。
-
删除集合(表):db.集合名称.drop() 输出:true 在查询集合就看不到这张表了
-
删除数据库: db.dropDatabase() 删除当前所在数据库 输出:{ "dropped" : "mldn", "ok" : 1 }
热身完毕,学习下一章《查询》
网友评论