mongoDB简介

简介

mongoDB被称为文档型数据库,当然也叫nosql数据库(不使用sql作为查询)。

 

文档:存储的是文档,专业术语叫做Bson(Bson-> json的二进制化后的数据)

 

特点:mongodb内部使用js解释引擎来实现数据的分析,在插入的时候,将数据转换成二进制的Bson来存储;在查询的时候,将数据Bson转换成json对象返回。

 

需要注意:一般mongodb数据库主要是和node.js(web服务器和一个js解释器)配合使用。

全栈开发工程师(数据库:mongodb 服务器语言:node.js 前端:bootstrap):js语言做开发

 

面试问题一:mongodb与传统关系型数据(MySQL)有什么区别?

答: mongodb没有表结构的概念,传统的关系型数据库的数据必须按照表的结构来存储(行、列形成的二维表,二维表之间形成实体关系、ER模型)。在mongodb中没有表的概念,将表换了一种称呼,叫做Collection(集合);对应表中记录也换了一种称呼,叫做Document(文档)(由多个document组成的起来叫做collection)。由多个collections组成的起来叫做数据库。

table === collection

row ==== document

 

查看资料:http://www.runoob.com/mongodb/mongodb-tutorial.html

安装

  1. 下载对应的稳定版源代码,并放置到(/usr/local/src目录下)

    官网:www.mongodb.org

    中文手册:http://www.runoob.com/mongodb/mongodb-tutorial.html

    中文社区:http://www.mongoing.com/

    http://www.open-open.com/

    http://www.infoq.com.cn

     

  2. 上传、解压文件(/usr/local/src/

    mongoDB 学习    

  3. 不需要编译,因为官方已经编译好,可以直接使用

    a. 一般都软件放在放在/usr/local/NAME 下

    mongoDB 学习

    b. 创建软连接

    mongoDB 学习

    c. 简单命令:

    mongoDB 学习

     

    d. 启动MongoDB服务:

    1. 使用服务端 --help 参数查看

    # ./mongodb --help

    1. 或者查看 README文件

    mongoDB 学习

    创建mongodb的数据文件夹

    mongoDB 学习

    3. 启动服务

    mongoDB 学习

    4. 显示效果:

    mongoDB 学习

    注意:使用上面的命令启动mongodb后,这个时候mongodb服务会占据该窗口,如果要关闭该窗口,ctrl+c 即可关闭该窗口

     

    5. 客户端连接:

    mongoDB 学习

  4. 简单命令

    mongoDB 学习

    mongoDB 学习

    mongoDB 学习

     

     

  5. 问题:如何让MongoDB在后台启动?
  6. 启动mongoDB 如果mongoDB以后台运行,必须加上 --logpath 后面必须要指定日志文件的名称

    # ./bin/mongod --dbpath /data/db --logpath /data/db/log.txt --fork --port 27017

    mongoDB 学习

    参数解释:

    --dbpath 数据存储目录

    --logpath 日志存储目录(加上日志的名称)

    --port 运行端口(默认27017)

    --fork 后台进程运行

     

    mongoDB使用

    入门命令

  7. show dbs 查看当前的数据库(类似mysql: show databases)

    mongoDB 学习

    问题:MySQL下在命令行下如何查看当前正在使用的数据库?

    答:

    # select database();

     

  8. use databaseName 选库

    答:MongoDB可以隐式的创建,直接use NAME 可以创建一个数据库

    mongoDB 学习

     

  9. show tables 查看当前库下的数据表
    1. show collection;

    注意:即使数据不存在,也可以直接切换,会自己创建。但是如果在数据库中不创建collection是不会显示的。

    mongoDB 学习

     

    创建数据库

    mongoDB的库是隐式创建,当use 一个不存在的库的时候,然后在该库下创建tables(collection)后即可创建数据库

    mongoDB 学习

    创建表

    注意:在使用命令行的时候,可以使用tab 快速的补齐

     

  10. 显式创建

    db.createCollection('collectionName') 创建表

    mongoDB 学习

     

     

  11. 隐式创建

    db.collectionName.insert(document) 向一个不存在的表里在插入数据的时候,隐式的创建表

    mongoDB 学习

     

  12. 可以使用

    show tables 查看当前数据库下的表(collection)

    show collections 也可以查看当前数据库下的表(collection)

    mongoDB 学习

     

    删除表

    db.collectionName.drop() 删除表

    mongoDB 学习

    删除数据库

    db.dropDatabase() 删除数据库

    mongoDB 学习

    基本增删改查命令

    1. find() 查找 # select * from tableName;

    注意:mongoDB会自动帮我们维持一个主键ID(_id)不需要也不建议手工的修改

    主键:1. 约束唯一 2. 快速查找

    # db.CollectioNAME.find()

    mongoDB 学习

    注意:

    mongoDB 学习

     

    增加数据 insert

    # db.collectionName.isnert(document) 注意 这里的document 是一个 json对象

    例如:

    单条记录:

    # db.collectionName.insert({_id:5, age:18, name:'asion'});

    多条记录

    # db.collectionName.insert(

    [

    {date:'2014-12-12', study:'mongodb'},

    {_id:9, gender:'male', name:'caoyang'}

    ]

    )

    mongoDB 学习

     

    删除数据 remove

    # db.collection.remove(查询表达式, 选项);

    # delete from tableName where id > 1 limit 1;(查询表达式,)

    选项是指 {justOne:true/false},是否只删一行, 默认为false

     

    注意

    1: 查询表达式依然是个json对象

    2: 查询表达式匹配的行,将被删掉

    3: 如果不写查询表达式,tables中的所有文档将被删掉

     

    例1: db.students.remove({sn:'001'});

    删除students表中 sn属性值为'001'的数据

    mongoDB 学习

     

     

    例2: db.students.remove({gender:'m'},{justOne:true});

    删除students表中gender属性为m的文档,只删除1行

    mongoDB 学习

     

    修改数据 update

    # db.collection.update(查询表达式, 新值)

    # udpate tableName set name = 'asion' where id = 1;

     

    注意

    修改什么? ---> 查询表达式指定

    改成什么样? --> 新值 或 赋值表达式

     

    例如:

    # db.news.update({name:'asion'},{name:'caoyang'});

    是指选中news表中,name值为qq的数据,并把其文档值改为{name:'caoyang'}

    结果: 文档中的其他列不见了,改后只有_id和name列数据

    注意-->新值直接替换了旧值,而不是修改,那我们设置的值做了一个全部的替换

    mongoDB 学习

     

     

    所以:如果是想修改数据的某列,可以用$set关键字

    # db.collectionName.update({name:'asion'}, {$set:{name:'caoyang'}})

     

    mongoDB 学习

    注意:只想修改document里面的某一个信息

    mongoDB 学习

     

     

    查询数据 find, findOne

    mongoDB 学习

    # db.collection.find(查询表达式, 显示的列);

    # db.collections.find(查询表达式, {列1:1,列2:1});

     

    例1:db.students.find(查询表达式, 显示的信息)

    查询students所有数据

    mongoDB 学习

     

    例2: db.students.find({},{gender:1})

    {} 取出所有

    查询所有文档数据,但是只显示gender列数据 (_id属性默认总是查出来)

    # select gender from tableName;

    mongoDB 学习

     

    例3: db.students.find({},{gender:1, _id:0})

    查询所有文档数据,但是只显示gender列信息,且不显示_id列信息

     

    例4: db.students.find({gender:'male'}, {name:1, _id:0});

    查询所有gender值为male的数据,但是只显示name这列信息

     

    php操作mongoDB

    学习文章:http://www.fkblog.org/blog569

    php-mongoDB扩展

  13. 下载源码

    下载地址:http://pecl.php.net/package/mongo

    a. 点击对应的【dll】

    mongoDB 学习

    b. 选择合适的php版本,这个时候需要注意的是,选择版本的时候,存在php线程安全选择。

    mongoDB 学习

    注意:线程安全信息如何查看?

    答:可以去php软件包,查找如下信息

    mongoDB 学习

    c. 将下在dll文件放置到php的ext目录

    mongoDB 学习

    d. 修改php.ini文件

    mongoDB 学习

    e. 一定要重启Apache

    f. 建立一个phpinfo() 测试函数即可

    mongoDB 学习

     

    Linux下安装

  14. 上传到 /usr/local/src

    mongoDB 学习

    解压

    mongoDB 学习

     

  15. 执行phpize命令

    mongoDB 学习

  16. 执行make && make install

    mongoDB 学习

  17. 生成目录

    mongoDB 学习

  18. 修改php.ini

    mongoDB 学习

  19. 重启Apache

     

  20. 创建测试文件

    mongoDB 学习

    mongodb实现短网址案例

    将一个非常长的URL地址转换为一个比较短的URL地址。主要为了用户的一个体验,因为短的信息美观一些。

    一般在微博里面最常见。

    体验地址:

    http://dwz.wailian.work/

    效果:

    mongoDB 学习

    实现技术点:

  21. 用户先输入一个长的网址,然后发送ajax请求去后台生成短的网址
  22. 到时候后台会保存一个 短网址 和 长网址的对应关系
  23. 当用户利用短网址去访问的时候,短网址的服务器或先判断短网址是否在本地的数据库里面存在,如果存在则取出后使用php的header('location:URL')函数做一个跳转即可完成。

     

    思路:

        1. 短网址必须唯一,一一对应。可以参考MySQL的主键ID,即可以自增,也可以唯一

        2. 网址必须短,但是需要存储的信息多。这个时候可以使用进制实现

    http://t.cn/h51HY h51HY(尽可能让它短一些,但是需要存储的数据要多)

     

            二进制 111111 2^6

            八进制 777777 8^6

            十六进制 FFFFFF F 16^6

    六十二进制 62^6

    mongoDB 学习

    500多亿

        3. 短网址尽量乱,无规律。防止发现规律后批量请求。

    代码实现

  24. 创建一个 输入页面

    mongoDB 学习

     

  25. 完成页面的ajax提交事件

    mongoDB 学习

     

  26. 后台生成短网址和长网址的映射关系

    mongoDB 学习

    mongoDB 学习

  27. 伪静态规则

    mongoDB 学习

     

  28. index.php文件做跳转

    mongoDB 学习

     

  29. 复制按钮
    1. 复制静态资源

    mongoDB 学习

    1. 修改val值 和 点击复制按钮的ID

    mongoDB 学习

    mongoDB 学习

     

  30. 效果

    mongoDB 学习

     

     

     

     

     

相关文章:

  • 2021-05-06
  • 2021-05-14
  • 2021-07-06
猜你喜欢
  • 2021-04-08
  • 2021-05-20
  • 2021-06-28
相关资源
相似解决方案