MongoDB学习之路

摘要

最近微信的项目快完了,开始搞网游开发,对于数据库的使用提上了日程,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的单索引,二级索引需要自己实现

  • 方便的冗余和拓展

    1. 复制集保证数据安全
    2. 分片拓展数据规模

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 test
db.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=1x=2
db.a.update({x:1},{x:2})

//局部更新,使用set
db.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}) => empty
db.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. 几个重要的网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值