MongoDB学习之路
来源:互联网 发布:德州扑克概率软件 编辑:程序博客网 时间:2024/06/04 01:22
摘要
最近微信的项目快完了,开始搞网游开发,对于数据库的使用提上了日程,MySQL已经不新鲜了,对于NoSQL还不了解,所以来学学大名鼎鼎的MongoDB,在此分享学习心得。
初级知识
1. 数据库分类
SQL数据库:支持SQL语言的数据库
比如 Oracle, MySQL 。。。NoSQL数据库:不支持SQL语言的数据库
比如 Redis, MongoDB
2. MongoDB特点
- 没有表结构的概念,每条记录可以有完全不同的结构
{name:"Linda", sex:"F"}{name:"Tom", addr:"HongKong"}{name:"Harry", home:[{"US"},{"Florida"}]}
完全的索引支持
MongoDB支持:
单键索引,多键索引 ,数组索引,全文索引,地理位置索引redis的key-value
hbase的单索引,二级索引需要自己实现
方便的冗余和拓展
- 复制集保证数据安全
- 分片拓展数据规模
3. MongoDB 安装与配置
安装很简单,去菜鸟教程上学习安装过程即可,最新的安装也可以参考菜鸟上的指导
菜鸟教程:www.runoob.com/mongodb
现在主要讲讲详细配置,我们的服务器搭建在Linux下,我们需要建立几个文件夹:
/mongodb /data 数据 /log 日志 /conf 配置文件 /bin 二进制文件
拷贝mongod文件到bin目录下
cp ../mongo-r2.6.5/mongod bin/
在/mongodb/conf文件夹下建立一个mongod.conf文件
mongod.conf: port = 12345 dbpath = data 数据存放的路径,绝对或相对都可以 logpath = log/mongod.log 指明一个log文件 fork = true Linux下表示这是一个后台进程
然后在/mongodb文件夹下执行命令来启动服务器
./bin/mongod -f conf/mongod.conf
4. MongoDB 客户端
使用编译时给出的客户端mongo进行连接本机12345端口下的test数据库
./mongo 127.0.0.1:12345/test
关闭客户端的方式有:
- db.shutdownServer() //需要先use admin来切换到admin权限
- 直接kill MongoDB的进程(要kill -15或不带参数)
5. MongoDB 基本操作
数据库操作
//查看数据库show dbs//切换数据库use tb_name//删除数据库(需要先用use进入一个db)db.dropDatabase()//新建数据库或数据集合MongoDB不需要单独建立数据库或数据集合,在use的时候就建立了//查看表show collections
插入数据
//插入数据到test数据库的a表use testdb.a.insert(JSON)db.a.insert({x:1})//MongoDB接受一个JSON作为数据源//插入多条数据for(i=3;i<100;i++)db.a.insert({x:i})
查询数据
// _id: 分布式数据库唯一标识符,我们可以进行自定义,但是不可以重复,若不定义,系统会自动分配一个db.a.find()db.a.find(JSON)db.a.find({x:2})//对数据计数db.a.find().count()//链式操作db.a.find().skip(3).limit(2).sort({x:1})skip(3): 表示跳过前三行limit(2): 表示只截取结果中的两个sort({x:1}): 表示对x进行排序
修改数据
//简单更新x=1为x=2db.a.update({x:1},{x:2})//局部更新,使用setdb.a.insert({x:100,y:100,z:100})db.a.update({x:100},{y:99})//会导致除了y之外的数据丢失,出现如下结果db.a.find({y:99}) => {y:99}//这时,使用set操作符db.a.update({x:100},{$set:{y:99}})db.a.find({y:99}) => {x:100,y:99,z:100}//若更新不存在的字段,加入true后可以自动insert进去db.a.find({x:99}) => emptydb.a.update({x:100},{x:999},true)db.a.find({x:99}) => {x:99}//更新多条数据db.a.insert({x:1})db.a.insert({x:1})db.a.insert({x:1})db.a.find({x:1}) => 3条数据db.a.update({x:1},{x:2})db.a.find({x:1}) => 2条数据db.a.find({x:2}) => 1条数据db.a.update({x:1},{$set:{x:2}},false,true)db.a.find({x:2}) => 3条数据
删除数据
//与update不同,remove一次性删掉所有匹配的数据db.a.remove({x:2})db.a.find({x:2}) => empty//删除整个数据集db.a.drop()
6. MongoDB 索引
//查看索引db.a.getIndexes()//创建索引db.a.ensureIndex({x:1})//这里x:1表示正向排序,x:-1表示逆向排序
其他知识库
1. 几个重要的网站
- Mongo官网 : www.mongodb.org
Mongo中文官网 : www.mongoing.com
菜鸟教程:www.runoob.com/mongodb
Mongo中文文档 : docs.mongoing.com/manual-zh/
- Mongo GitHub : github.com/mongodb
- jira : jira.mongodb.org
0 0
- MongoDB学习之路
- MongoDB学习之路---one
- 【MongoDb学习之路】 MongoDb 基本操作命令
- 学习记录之mongodb
- PHP之mongodb学习
- mongodb之索引学习
- MongoDB学习之三----Java操作MongoDB
- MongoDB学习之旅三:MongoDB体系结构
- MongoDB学习之旅五:MongoDB常用工具
- MongoDB学习之旅十一:MongoDB GridFS
- MongoDB学习之旅十二:MongoDB MapReduce
- MongoDB学习之旅二十:MongoDB性能监控
- mongodb学习--Linux之mongodb的启动
- 学习笔录之MongoDB小记
- MongoDB学习整理之查询
- MongoDB学习整理之更新
- MongoDB学习整理之Sharding
- MongoDB学习整理之索引
- ionic--初级学习button
- epoll_wait的LT 和 ET事件处理模式
- redis持久化原理详解
- Linux下cocos环境搭建.
- Go语言并发
- MongoDB学习之路
- gdb调试
- 对数据结构一点一小小的理解(四)——线性表
- deque容器和list容器学习
- C# Lambda
- Think IN JAVA 第一章对象入门
- Oracle TO_date用法解析
- Java的几种对象(PO,VO,DAO,BO,POJO)解释
- 到底如何区分什么是架构、框架、模式和平台 ?