zoukankan      html  css  js  c++  java
  • mongodb入门教程


    title: mongodb入门教程
    date: 2016-04-06 14:47:18
    tags:

    为什么要认识呢,因为这玩意就一傻逼

    借用一下百科的介绍
    MongoDB
    是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    蛋疼的就是这个介于。。。之间,既不能把它当成关系型数据库也不能当做非关系型数据库,具体哪里不爽下面慢慢介绍

    一、安装

    vim conf/mongodb.conf

    dbpath=/home/waimaiw/mongodb/db
    logpath=/home/waimaiw/mongodb/logs/mongodb.log
    port=27017
    nohttpinterface=true
    auth=true
    

    绑定配置文件和访问地址

    /home/waimaiw/mongodb/bin/mongod --bind_ip localhost -f
    /home/waimaiw/mongodb/conf/mongodb.conf
    绑定多个ip
    --bind_ip=ip1,ip2

    配置开机启动

    vim /etc/rc.local

    /home/waimaiw/mongodb/bin/mongod --config
    /home/waimaiw/mongodb/bin/mongodb.conf

    关闭

    怎么关闭 mongoDB?千万不要 kill -9 pid,可以 kill -2 pid 或 db.shutdownServer()

    其实建议使用supervisor管理启动,配置如下

    [program:mongodb]
    command=/home/waimaiw/mongodb/bin/mongod --config
    /home/waimaiw/mongodb/conf/mongodb.conf
    directory=/home/waimaiw/mongodb
    autostart=true
    user=waimaiw
    
    有两个警告 ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. ** We suggest setting it to 'never' ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. ** We suggest setting it to 'never' 解决办法 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never> /sys/kernel/mm/transparent_hugepage/defrag

    使用supervisor的话 要去掉 配置文件folk这行参数.

    二、权限

    mongo3.0以后 权限管理有很大变化,不懂得建议看官放文档,其他百度谷歌各种教程的基本还都是2.x的方式。

    第一次启动不要加--auth参数

    这样默认的启动是没有密码的,作为一个运维这是不能容忍的,所以先配置权限

    use admin
    db.createUser(
    	{
     		user: "waimaiw",
    		pwd: "waimaiw",
    		roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    	}
    )
    

    查看用户
    show users

    db.system.users.find()

    这里说明一下,mongodb的每一个数据库都要单独的权限

    下次启动的时候就加上--auth参数,现在一些操作就需要你输入用户名和密码了
    如下

    use admin
    db.auth("waimaiw",waimaiw)
    

    返回1,就说明认证成功

    或者这样登录也可以

    /home/waimaiw/mongodb/bin/mongo -u waimaiw -p waimaiw --authenticationDatabase admin

    三、使用

    通过/home/waimaiw/mongodb/bin/mongo 进入mongodb的shell

    mongo的shell 是js的,所以可以进行简单的运算

    有权限的认证下权限,然后
    show dbs

    会显示如下

    注意: 没有插入数据的库是不会显示的

    另外mongo创建数据库的命令 use 库名 如果没有这个库 就会创建一个数据库

    删除数据库:

    db.dropDatabase()
    

    mongo的表也叫文档,mongo的文档不需要创建字段,并且相同的字段可以使用不同的类型,这也是mongo和关系型书库最大的区别

    需要注意的是:

    • mongo中键值都是有序的
    • mongo类型区分大写和小写
    • mongo中不能有重复的键

    集合

    集合在mongodb中相当于关系型数据库的表

    createCollection() 方法

    MongoDB db.createCollection(name, options) 是用来创建集合.

    集合在mongodb可以创建和可以不创建

    直接使用命令

    db.lala.insert({"name":"sunhong"})
    

    就可以常见一个名叫lala的集合,并将数据插入

    也可以创建

    db.createCollection("diandongche")
    

    也可以加上参数

    db.createCollection("baowenxiang",{ capped : true, autoIndexID : true, size : 6142800, max : 10000 })
    

    参数说明

    字段 类型 描述
    capped Boolean (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。
    autoIndexID Boolean (可选)如果为true,自动创建索引_id字段的默认值是false。
    size number (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。
    max mubmer (可选)指定封顶集合允许在文件的最大数量。

    检查集合

    show collections
    

    删除集合

    db.COLLECTION_NAME.drop()
    

    文档

    文档相当于关系型数据库中的表的行,也就是记录

    插入文档在说集合的时候说了点

    db.lala.insert({"name":"sunhong"})  
    

    mongodb的数据格式都是键值的方式存储,所以放在大括号里,这有点像Python的字典

    查询文档

    不同于关系型数据库,mongodb的查询关键字是find,语法如下

    db.COLLECTION_NAME.find()
    

    find() 方法将在非结构化的方式显示所有的文件。 如果显示结果是格式化的,那么可以用pretty() 方法。

    db.COLLECTION_NAME.find().pretty()
    

    不过这在mongodb3.x中好像不太好用

    RDBMS Where子句等效于MongoDB
    操作 语法 示例 RDBMS等效语句
    Equality {<key>:<value>} db.mycol.find({"by":"yiibai tutorials"}).pretty() where by = 'yiibai tutorials'
    Less Than {<key>:{$lt:<value>}} db.mycol.find({"likes":{$lt:50}}).pretty() where likes < 50
    Less Than Equals {<key>:{$lte:<value>}} db.mycol.find({"likes":{$lte:50}}).pretty() where likes <= 50
    Greater Than {<key>:{$gt:<value>}} db.mycol.find({"likes":{$gt:50}}).pretty() where likes > 50
    Greater Than Equals {<key>:{$gte:<value>}} db.mycol.find({"likes":{$gte:50}}).pretty() where likes >= 50
    Not Equals {<key>:{$ne:<value>}} db.mycol.find({"likes":{$ne:50}}).pretty() where likes != 50
    AND 在 MongoDB

    mongodb中没有and关键字,而是使用逗号“,”来连接条件的,如下

    db.mycol.find({key1:value1, key2:value2}).pretty()
    
    OR 在 MongoDB

    mongodb中的or的用法也不太一样,变成了$or 用法如下

    db.mycol.find(
    	{
      		$or: [
         {	key1: value1}, {key2:value2}
     		 ]
    	}
    ).pretty()
    

    更新文档

    MongoDB的update()和save()方法用于更新文档到一个集合。 update()方法将现有的文档中的值更新,而save()方法使用传递到save()方法的文档替换现有的文档。

    update()方法的基本语法如下

    db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)
    

    mongodb 的 save()方法如下所示的基本语法:

    db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
    
    删除文档

    MongoDB 的 remove()方法用于从集合中删除文档。remove()方法接受两个参数。一个是标准缺失,第二是justOne标志

    • deletion criteria : 根据文件(可选)删除条件将被删除。
    • justOne : (可选)如果设置为true或1,然后取出只有一个文档。

    remove()方法的基本语法如下

    db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)
    

    只删除一个

    db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
    

    删除所有

    db.mycol.remove({})
    

    基本的差不多这么多了,以后再深入学习。

  • 相关阅读:
    集成学习方法
    nlp知识
    kaggle竞赛入门整理
    pandas知识点
    EM算法
    特征工程
    【clustering】之K-means && K-medoids
    sklearn学习笔记
    周总结十二
    《如何高效学习》读书笔记五
  • 原文地址:https://www.cnblogs.com/colder219/p/5492550.html
Copyright © 2011-2022 走看看