zoukankan      html  css  js  c++  java
  • MongoDB数据库基本命令

    MongoDB的启动

    先找到MongoDB所在的路径,然后执行以下代码

    mongod --dbpath=E:Program FilesMongoDBServer3.4datadb

    --dbpath后面写的是数据库存储数据的文件夹,先启动mongod是为了启动数据库的服务端,等待客户端的连接

    然后再启动客户端去连接服务端,见到 > 就代表连接成功了

    库的操作

    1.查看所有的数据库

    格式: show databases;
    简写: show dbs;

    2.创建或者使用一个数据库

    格式: use 数据库名;
    当对应的数据库不存在的时候,表示创建该数据库
    如果数据库已经存在,表示使用该数据库

    注意:如果创建了一个新的数据库,而该数据库中没有数据,则使用
    show dbs查看的时候,任然看不到,插入数据库后,即可查看到
    插入数据如: db.student.insert({name:"haha"})

    3.查看当前使用的数据库

    格式: db 代表的是当前数据库
    或者 db.getName() 可以查看当前数据库的名字

    4.删除当前数据库

    db.dropDatabase()

    集合的操作 ---相当于关系型数据库的 表

    1.查看当前库中的所有集合

    格式: show collections;

    2.创建一个集合

    方式1: db.createCollection("集合名") 集合名需要加上引号
    例:db.createCollection("集合名")
    
    
    方式2: db.集合名.insert(数据)
    例:db.student2.insert({name:"张三"})

    区别:

    方式1是创建一个空的集合,如果集合已经存在,不会覆盖创建

    方式2:如果对应的集合不存在表示创建一个集合,并插入数据
    如果对应的集合存在,表示直接插入一条数据!


    3.删除一个集合

    格式: db.集合名.drop()

    文档的操作 ---  相当于关系型数据库表中一行数据 row 

    1.插入数据


    1.添加一个数据

    格式: db.集合名.insert(数据)
    数据: key-value的形式
    是bson格式, 与json格式一样

    格式: 

    1. {key1:value,key2:value, keyN:value} 2. [ {key1:value,key2:value, keyN:value}, {key1:value,key2:value, keyN:value}]   # jsonArray 3. {key1:嵌套json数据,key2:value, keyN:value}
    例: db.student.insert({name:'alex',age:66,address:"中南海",sex:"男"})
    WriteResult({ "nInserted" : 1 })表示插入成功
    注意: mongodb插入数据的时候,会默认生成一个 _id相当于关系型数据库中的主健
    如: "_id" : ObjectId("5b8f45c12e3e35173c33f13c")        

    2.添加多个数据

    格式: db.集合名.insert([数据1,数据2,数据n])
    例: db.student.insert([{name:'tony',age:66,address:"北京",sex:"女"},
    {name:'sakura',age:56,address:"陕西",sex:"女"},
    {name:'egon',age:46,address:"中南海",sex:"男"}

    3.插入数据 save 保存

    格式: db.集合名.save(数据) 使用方法与insert一致
    例: db.student.save({name:'马赛克',age:150,address:"东京",sex:"不明"})
    
    区别: 
    db.student.save({ "_id" :ObjectId("5b8f47d03d9b6b894071334b"),name:'马爸爸'})
    如果使用的是save,而且设置_id属性,且_id已经存在时, 此时save表示修改数据
    
    db.student.insert({ "_id" :ObjectId("5b8f47d03d9b6b894071334b"),name:'马妈妈'})
    如果使用的是insert,而且设置_id属性,且_id已经存在时, 则insert会报错,

    2.查询数据---结果是 bson的形式


    1.查询所有的数据

    格式: db.集合名.find()

    2.根据条件来查询数据 --关系数据库: select 字段名, from 表 where 条件

    格式: db.集合名.find(query,names)
    参数query是查询条件 
    参数names 是要展示的字段名
    
    注意: query,names都是json的数据格式
    query参数 如: {age:76} 表示查询age = 76的数据
    names参数 如: {name:1,age:1} 表示只显示name属性和age属性
    注意如果没有names,则所有的属性及值都显示
    
    1表示显示, 0 表示不显示(当有1存在时,只允许_id:0,别的为0会报错)

    3.查询一条数据

    格式: db.集合名.findOne(query,names)

    4.根据_id来查询

    例: db.student.findOne({"_id":ObjectId("5b8f47d03d9b6b894071334a")})

    5.格式化查询结果

    格式: db.集合名.find().pretty()

    3.数据的修改 ---关系数据库 update 表名 set 字段名 = 属性值...where 条件

    格式:db.集合名.update(query,set,{upsert:布尔类型,multi:布尔类型})

    参数都是json的格式
    1.query 查询条件
    2.set 要修改的属性和对应的属性值

    格式:db.集合名.update(query,{$set:{属性名:属性值}})   必须写上$set,否则就是替换整个数据
    格式:db.集合名.update(query,{$inc:{属性名:值}})  表示在某个属性上增加某个值

    3. upsert 表示在修改数据的时候,如果查询条件没有找到对应的数据,
    是否将修改的内容当作新的数据添加到集合中
    true 表示添加进来
    false 表示不当作新数据添加进来
    默认是false

    例:
    db.student.update({name:"哈哈"},{address:"七"},{upsert:true})

    4.multi 表示在修改数据的时候,如果查询出了多条符合条件的数据,是否将多条数据全部进行修改
    true 表示全部都修改
    false 表示值修改匹配的第一条数据

    默认是false

    例:
    db.student.update({name:"egon"},{$set:{sex:"不明"}},{multi:true})

    4.删除数据 ---- delete from 表名 where 条件

    格式:
    db.集合名.remove(query,{justOne:布尔值}) 例: db.student.remove({name:"alex"}) db.student.remove({name:"eva"},{justOne:true})

    注意:默认会将所有符合条件的数据都删除,
    justOne表示是否只删除 第一条符合条件的数据
    true 只删除一条, false表示全部删除, 默认为false

    小结:删除数据时默认全部删除,若想删除一个需要{justOne:true}来控制, 而修改数据时默认值修改一个,若想全部修改需要用{multi:true}来控制

    查询条件

    1.比较运算符

        $gt 大于
        $lt  小于
        $gte 大于等于
        $lte  小于等于
        $eq   等于   或者  :
        $ne   不等于
           
        格式: db.集合名.find({字段名:{运算符:值}})
    
        需求:查询年龄大于60的student
        例: db.student.find({age:{$gt:60}})
           
        需求:查询年龄在大于等于40且小于等于60的数据
        db.student.find({age:{$gte:40}})    

    2.逻辑运算符

    $and  且或者 ,  
    格式: db.集合名.find({条件1,条件2})
    格式2:   db.集合名.find({$and:[{条件1},{条件2}]})
    
    需求:找出姓名是 alex的 年龄是 35的岁的数据?
    db.student.find({name:"alex",age:35})
    或者 db.student.find({$and:[{name:"alex"},{age:35}]})    注:这里需要使用中括号来代表一个整体
            
    需求:查询年龄在大于等于40且小于等于60的数据
               error :  db.student.find({age:{$gte:40},age:{$lte:60}})
               正确写法:  db.student.find({age:{$gte:40,$lte:60}})
               注意: 以上写法后面的属性会覆盖前面的属性
            
            且
               db.student.find({$and:[{age:{$gte:40}},{age:{$lte:60}}]})
    
    $or   或者
    格式:   db.集合名.find({$or:[{条件1},{条件2}]})  
    需求:查询数年龄是 35的或者 76的
    db.student.find({$or:[{age:35},{age:76}]})
          
    
    需求: 查询出年龄是35的且住在东京的  或者  年龄76且住西安的
    思路:(age = 35 and address = "东京")   or  (age = 76 and address = "西安")
    $
    or 与 $and 综合使用 {$or:[{$and:[{age:35},{address:"东京"}]},$and:[{age:76},{address:"西安"}]}]} $not 非 格式: db.集合名.find({$not:{条件1}})

    3.模糊运算符

    格式: db.集合名.find({字段名:/匹配的数据/})
    注意: / /   不需要加引号

    4.分页 ---- 关系型数据库: limit 值1,值2

    limit(number) 表示读取指点数量的数据 相当于 值2   
    skip(position) 表示跳到指定位置开始读数据 注: 位置从 索引0 开始 相当于值1
    
    db.student.find().skip(3) 
    db.student.find().limit(3)
    
    需求: 每页3条数据,获取3页数据
    db.student.find().skip(6).limit(3)

    需求: 每页3条数据,获取n页数据
    格式: db.student.find().skip((n-1)*3).limit(3)

    5.排序 sort 字段名 升序/降序

    1: 表示升序 -1: 降序
    格式: db.student.find().sort({字段名:1/-1})
    需求: 按照年龄的升序排序
    db.student.find().sort({age:1})

    6.计算查询结果的数量

    db.student.find().count()



  • 相关阅读:
    python有哪些好的学习资料或者博客?
    运维角度浅谈MySQL数据库优化
    MySQL高可用性之Keepalived+Mysql(双主热备)
    Python 开发者节省时间的 10 个小技巧
    PHP 加密的几种方式
    17种常用的jQuery全屏焦点图代码
    13种酷炫的html5 3D图片切换代码
    14款微信小游戏源码下载
    Ext js框架模拟Windows桌面菜单管理模板
    10款 非常酷炫的网站首页焦点图 兼容ie浏览器
  • 原文地址:https://www.cnblogs.com/louyifei0824/p/9595474.html
Copyright © 2011-2022 走看看