zoukankan      html  css  js  c++  java
  • MongoDB

    安装MongoDB和账号管理

    1、安装路径为
    D:MongoDB,将D:MongoDBin目录加入环境变量

    2、新建目录与文件

    D:MongoDBdatadb
    D:MongoDBlogmongod.log

    3、制作系统服务

    mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:MongoDBlogmongod.log
    --logappend --dbpath D:MongoDBdatadb  --serviceName "MongoDB" --serviceDisplayName "MongoDB"  --install

    4、启动系统服务/关闭系统服务

    net start MongoDB  /  net stop MongoDB 

    5、进入MongoDB

    当进入MongoDB有一些警告信息,需要去掉

    首先关闭服务,再进行重启数据库

    mongod --remove
    
    mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:MongoDBlogmongod.log
    --logappend --dbpath D:MongoDBdatadb  --serviceName "MongoDB" --serviceDisplayName "MongoDB"  --install --auth

    在MongoDB外登录账号

    mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

    6、创建账号,MongoDB每个数据库都是唯一账号密码,所以先进入其内再进行创建

    use admin
    db.createUser(
    
      {
    
        user: "root",
    
        pwd: "123",
    
        roles: [ { role: "root", db: "admin" } ]    # 创建权限
    
      }
    
    )
    #创建一个普通账号
    use test    
    
    db.createUser(
    
      {
    
        user: "egon",  
    
        pwd: "123",
    
        roles: [ { role: "readWrite", db: "test" },  #操作test库有读写权限
    
                 { role: "read", db: "db1" } ]    #操作其他库只有读的权限
    
      }
    
    )
    
     
    代码

    二、操作

    1、数据库操作

    #1、增
    use config #如果数据库不存在,则创建数据库,否则切换到指定数据库。
     
    #2、查
    show dbs #查看所有
    可以看到,我们刚创建的数据库config并不在数据库的列表中, 要显示它,我们需要向config数据库插入一些数据。
    db.user.insert({'a':1})
    
    #3、删
    use config #先切换到要删的库下
    db.dropDatabase() #删除当前库

    2、集合操作:

    #1、增
      #mongoDB 中得表没有父子的关系
      db.user
      db.user.info
      db.user.auth
          # 创建一个id是1,名字是egon的数据,id必须写_id
      db.user.insert({"_id":1,"name":""egon"})
    #2、查
    > show dbs #只要不为空就能显示出来
    > show tables
    > show collextions  #与tables一样功能
    table1
    table2
    #3、删
    
    > db.table1.drop()
    true
    > show tables
    table2

     3、文档操作

    添加数据进入表

    db.user.insert({"_id":1,"name":"egon"})

    《a、增加》

    #1、没有指定_id则默认ObjectId,_id不能重复,且在插入后不可变
    
    #2、插入单条
    user0={
        "name":"egon",
        "age":10,
        'hobbies':['music','read','dancing'],
        'addr':{
            'country':'China',
            'city':'BJ'
        }
    }
    #把user0的数据添加进去
    db.user.insert(user0)
    #查看表里的所有数据
    db.user.find()
    
    #3、插入多条
    user1={
        "_id":1,
        "name":"alex",
        "age":10,
        'hobbies':['music','read','dancing'],
        'addr':{
            'country':'China',
            'city':'weifang'
        }
    }
    
    user2={
        "_id":2,
        "name":"wupeiqi",
        "age":20,
        'hobbies':['music','read','run'],
        'addr':{
            'country':'China',
            'city':'hebei'
        }
    }
    
    
    user3={
        "_id":3,
        "name":"yuanhao",
        "age":30,
        'hobbies':['music','drink'],
        'addr':{
            'country':'China',
            'city':'heibei'
        }
    }
    
    user4={
        "_id":4,
        "name":"jingliyang",
        "age":40,
        'hobbies':['music','read','dancing','tea'],
        'addr':{
            'country':'China',
            'city':'BJ'
        }
    }
    
    user5={
        "_id":5,
        "name":"jinxin",
        "age":50,
        'hobbies':['music','read',],
        'addr':{
            'country':'China',
            'city':'henan'
        }
    }
    #添加多条数据进去
    db.user.insertMany([user1,user2,user3,user4,user5])
    单条插入与多条插入
    # 基于save添加
        db.t1.insert({"_id":1,"a":1,"b":2,"c":3}) #有相同的_id则覆盖,无相同的_id则新增,必须指定_id db.t1.save({"_id":1,"z":6}) db.t1.save({"_id":2,"z":6}) db.t1.save({"z":6})

    《b、查询

    #SQL与MongoDB查询分别:
    # SQL:=,!=,>,<,>=,<=
    # MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型
    
    #1、名字等于alex
    SQL:select * from db1.user where name = "alex";
    MongoDB:db.user.find({'name':'alex'})
    
    #2、名字不等于alex
    SQL:select * from db1.user where name != "alex";
    MongoDB:db.user.find({'name':{"$ne":'alex'}})
    
    #3、id大于2
    SQL:select * from db1.user where id > 2;
    MongoDB:db.user.find({'_id':{'$gt':2}})
    
    #4、id小于3
    SQL:select * from db1.user where id < 3;
    MongoDB:db.user.find({'_id':{'$lt':3}})
    
    #5、id大于等于2
    SQL:select * from db1.user where id >= 2;
    MongoDB:db.user.find({"_id":{"$gte":2,}})
    
    #6、id小于等于2
    SQL:select * from db1.user where id <= 2;
    MongoDB:db.user.find({"_id":{"$lte":2}})
    比较运算

    SQL语句中:and、or、not   

    MongoDB中:筛选只能是字典套条件{{},[]}  逗号“,”是和的意思,

    或者:“$or”后面条件放入[]中,“$or”:[]              否则:用“$not”表示

    # SQL:and,or,not
    # MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not"
    
    #1、取出id大于等于2和小于4的数据
    SQL:select * from db1.user where id >= 2 and id < 4;
    MongoDB:db.user.find({'_id':{"$gte":2,"$lt":4}})
    
    #2、取出id大于等于2和年龄小于40的数据
    SQL:select * from db1.user where id >= 2 and age < 40;
    MongoDB:db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})
    
    #3、取出id大于等于5或者name等于alex的数据
    SQL:select * from db1.user where id >= 5 or name = "alex";
    MongoDB:db.user.find({
        "$or":[
            {'_id':{"$gte":5}},
            {"name":"alex"}
            ]
    })
    #取出id(大于等于0和小于等于1)或id大于等于4或name等于yuanhao的数据
    SQL:select * from db1.user where id >=0 and id <=1 or id >=4 or name = "yuanhao";
    MongoDB:db.user.find({"$or":[
    {"_id":{"$lte":1,"$gte":0}},
    {"_id":{"$gte":4}},
    {"name":"yuanhao"}
    ]})
    #4、取出除以2于1的id
    SQL:select * from db1.user where id % 2=1;
    MongoDB:db.user.find({'_id':{"$mod":[2,1]}})
    
    #5、上题,取反
    db.user.find({'_id':{"$not":{"$mod":[2,1]}}})
    
    逻辑运算
    逻辑运算

    成员运算:$in,$nin

    #查询name中alex和egon是否在数据中
    db.user.find({"name":{"$in":["alex","egon"]}})
    db.user.find({"name":{"$nin":["alex","egon"]}})

    正则匹配

    #查询以jin开头和以g或n结尾的数据,i是区分大小写的
    select * from db1.user where name regexp "^jin.*?(g|n)$";
    db.user.find({
        "name":/^jin.*?(g|n)$/i
    })

    查指定字段

    #0是不显示其字段,1就是显示其字段
    select name,age from db1.user where name regexp "^jin.*?(g|n)$";
    db.user.find({
        "name":/^jin.*?(g|n)$/i
    },
    {
        "_id":0,
        "name":1,
        "age":1
    }
    )

    查询数组

    #1、查看有dancing爱好的人
    db.user.find({'hobbies':'dancing'})
    
    #2、查看既有dancing爱好又有tea爱好的人
    db.user.find({'hobbies':{"$all":['dancing','tea']}})
    
    #3、查看第2个爱好dancing的人
    db.user.find({"hobbies.2":"dancing"})
    
    #4、查看数据中以索引[1,2]切片显示爱好,并且只显示爱好字段
    db.user.find(
    {},
    {
        "_id":0,
        "name":0,
        "age":0,
        "addr":0,
        "hobbies":{"$slice":[1,2]},
    }
    )
    按照条件查询(数组)

    排序

    # 排序:--1代表升序,-1代表降序
    db.user.find().sort({"name":1,})
    db.user.find().sort({"age":-1,'_id':1})

    获取数量

    # 获取数量
    db.user.count({'age':{"$gt":30}}) 
    --或者
    db.user.find({'age':{"$gt":30}}).count()
    #1、{'key':null} 匹配key的值为null或者没有这个key
    db.t2.insert({'a':10,'b':111})
    db.t2.insert({'a':20})
    db.t2.insert({'b':null})
    
    > db.t2.find({"b":null})
    { "_id" : ObjectId("5a5cc2a7c1b4645aad959e5a"), "a" : 20 }
    { "_id" : ObjectId("5a5cc2a8c1b4645aad959e5b"), "b" : null }
    
    #2、查找所有
    db.user.find() #等同于db.user.find({})
    #格式变好看
    db.user.find().pretty()
    
    #3、查找一个,与find用法一致,只是只取匹配成功的第一个
    db.user.findOne({"_id":{"$gt":3}})
    杂项

    《c、修改》

    #update() 方法用于更新已存在的文档。语法格式如下:
    db.user.update(
        条件,
        修改字段,
        {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
        )
    参考SQL:update db1.t1 set id=10 where name="egon";
    upsert : 可选,默认为false,代表如果不存在update的记录不更新也不插入,设置为true代表插入。
    multi : 可选,默认为false,代表只更新找到的第一条记录,设为true,代表更新找到的全部记录。
    writeConcern :可选,抛出异常的级别。
    更新操作是不可分割的:若两个更新同时发送,先到达服务器的先执行,然后执行另外一个,不会破坏文档。
    update语法
    #查找name等于egon,把age修改为11,如果没有upsert为true就会添加一条只有age=11的数据
    db.user.update(
        {"name":"egon"},
        {"age":11},
        {
            "multi":true,
            "upsert":true
        }
        )
    update列子
    #覆盖式:就是按照条件查找数据,修改的数据把原来的数据覆盖掉(慎用)
    db.user.update(
            {"name":"alex"},
            {"age":10,"name":"Alex**"}
        )
    覆盖式
        #局部修改:$set  只修改更新字段(很受用)如果没有age字段,同样会自动添加
    db.user.update(
            {"name":"alex"},
            {"$set":{"age":73,"name":"潘金莲-alex"}}
        )
    局部修改
    #改多条 就是把查询知识运用进来,请看查询
    db.user.update(
            {"_id":{"$gte":1,"$lte":2}},
            {"$set":{"age":53,}},
            {"multi":true}
        )
    多条修改
    #修改嵌套文档  大概意思就是字典中如果还有字典,就可以用“.”进行内部修改(不懂自己实验)
    #{ "_id" : 3, "name" : "潘金莲-alex", "age" : 30, "hobbies" : [ "music", "drink" ], "addr" : { "country" : "China", "city" :
    "heibei" } }
    db.user.update(
            {"name":"潘金莲-alex"},
            {"$set":{"addr.country":"Japan"}}
    字典嵌套(.一下就懂)
    #修改数组  也就是按照索引修改(MMP脑袋炸了,一看到数字就蒙蔽)
        db.user.update(
            {"name":"潘金莲-alex"},
            {"$set":{"hobbies.1":"Piao"}}
        )
    修改数组(索引)

    《d、删除》

    #1、删除多个中的第一个
    db.user.deleteOne({ 'age': 8 })
    
    #2、删除国家为China的全部
    db.user.deleteMany( {'addr.country': 'China'} ) 
    
    #3、删除全部
    db.user.deleteMany({}) 
    #1、unset 删除某字段所有记录
    db.user.update(
            {"name":"潘金莲-alex"},
            {"$unset":{"hobbies":""}}
        )
    #2、$inc 增加和减少,加减法懂就能明白其道理
    db.user.update(
            {},
            {"$inc":{"age":1}},
            {"multi":true}
        )
    db.user.update(
            {},
            {"$inc":{"age":-10}},
            {"multi":true}
        )
    #3、$push, $pop  $pull   一个添加,两个删除
    #按照字段添加其数据(简单)
    db.user.update(
            {"name":"yuanhao"},
            {"$push":{"hobbies":"tangtou"}},
            {"multi":true}
        )
    #$each就是把列表循环加如字段内
    db.user.update(
            {"name":"yuanhao"},
            {"$push":{"hobbies":{"$each":["纹身","抽烟"]}}},
            {"multi":true}
        )
    
    #从头删-1,从尾删1
    db.user.update(
            {"name":"yuanhao"},
            {"$pop":{"hobbies":-1}},
            {"multi":true}
        )
    
    db.user.update(
            {"name":"yuanhao"},
            {"$pop":{"hobbies":1}},
            {"multi":true}
        )
    
    #按条件删
    db.user.update(
            {"name":"yuanhao"},
            {"$pull":{"hobbies":"纹身"}},
            {"multi":true}
        )
    花样删除法
    #避免添加重复:"$addToSet" ,了解了解
    
    db.urls.insert({"_id":1,"urls":[]})
    
    db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})
    db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})
    db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})
    
    db.urls.update({"_id":1},{
        "$addToSet":{
            "urls":{
            "$each":[
                'http://www.baidu.com',
                'http://www.baidu.com',
                'http://www.xxxx.com'
                ]
                }
            }
        }
    )
    避免重复添加
  • 相关阅读:
    JAVA 大数据基本操作
    C++ set 基本操作
    JVM 线上故障排查基本操作
    Git基本常用命令
    Git 入门:概念、原理、使用
    30分钟学会如何使用Shiro
    做个男人,做个成熟的男人,做个有城府的男人
    Nginx的最基本功能以及简单配置
    博客网站
    单点登录原理与简单实现
  • 原文地址:https://www.cnblogs.com/f1443526266/p/8318863.html
Copyright © 2011-2022 走看看