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的单索引,二级索引需要自己实现

  • 方便的冗余和拓展

    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 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=1x=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
原创粉丝点击