MongoDB第一篇

MongoDB 第一篇

关系型数据库和非关系型数据库的优缺点:

mysql:数据结构一致性高,但并发处理弱,读写能力差

mongodb:数据灵活性更高,并发处理强,读写速度快

MongoDB数据库特点:

  1. 由c++编写的数据库管理系统
  2. 支持丰富的增删该查操作
  3. 由丰富的存储类型,技术相对成熟
  4. 支持众多的编程语言操作
  5. 使用方便,便于扩展和部署

MongoDB安装:

linux : sudo apt-get install mongodb
安装位置:/var/lib/mongodb
配置文件:/etc/mongodb.conf
命令集:/user/bin
    

MongoDB命令:

mongod --dbpath 文件名			设置数据库的存储地址
mongod --port 端口号			设置数据库连接端口
mongo  		启动mongo
mongodump -h host -d dbname -o dir 			数据库备份
e.g  mongodump -h 127.0.0.1 -d stu -o .   #备份本机中的stu库到当前文件下
mongorestore -h host:port -d dbname path	数据库的恢复
e.g  mongorestore -h 127.0.0.1:27017 -d student ./stu  #将当前文件下的stu库恢复到本机中的student库中

数据库监控命令

mongostat  查看数据库运行状态

insert query update delete : 每秒执行增查改删的次数
command  : 每秒执行mongo命令次数
flushes  : 和磁盘交互情况
vsize  res : 使用虚拟内存和物理内存情况
time : 运行时间

mongotop  检测每个数据库中数据表的读写情况

ns     数据集合
total  总时长
read   读时长
write  写时长

数据库操作:

use stu 		#创建数据库
show dbs 		#查看数据库
db.dropDatabase()		#删除数据库

** 全局变量db: db变量代表当前正在使用的数据库,如果不选择任何数据库 db 为 系统默认数据库 test

集合操作

db.createCollection(collection_name)		#创建集合名
db.class2.insert({"name":"lucy","age":"20","sex":"m"})  #通过插入数据创建集合class2
show cllections or show tables		#查看集合
db.collection_name.drop()		#删除集合
db.collection_name.renameCollection("new_name")  		#集合重命名

文档

1.文档是mongodb数据库中基本的数据组成形式类似字典
2.文档由键值对构成,每个键值对表达一个数据项
3.mongodb文档属于bson类型数据
4.文档中的键值对是有序的

扫描二维码关注公众号,回复: 5629860 查看本文章

数据库存储的数据类型:

类型             值
    
数字             整数  小数
bool         	true   false
Array            数组
Date             日期时间
Timestamp        时间戳
String           字符串
Binary data      二进制字符串
Null             空  null
Object           内部文档(对象)
regex            正则表达式
code             代码
ObjectId         ObjectId字串

ObjectId类型
     
        "_id" : ObjectId("5bd13b8049c6eee82a51e915")
       
        _id: 当插入mongodb文档时会自动生成_id域作为主键id
        值 : ObjectId数据,为了和其他的值不重复
              2416进制编码
              8位文档创建时间  6位机器ID  4位进程id  6位计数器

MongoDB增删改查操作

插入文档

insert 插入文档
db.collection_name.insertOne()		#插入单个文档
db.collection_name.insertMany([{},{},{}])		#插入多条文档
db.collection_name.insert()		#其功能:insertOne + insertMany

save  插入文档
db.collection.save()	#同insert相同,可以插入一条或多条,如果文档存在则会替换原来的文档

文档查询 find

db.collection_name.find(query,field)
功能:查询所有符合条件的文档
参数:query  表示查询条件,是一个键值对文档,默认表示查找所有内容
	 field  表示查找的域,是一个键值对文档,0表示不查找,1表示查找
e.g	 db.class2.find({},{_id:0,name:1})		#表示不查找_id域,只查找name域内容

db.collection_name.findOne(query,field)
功能:查找第一条符合条件的文档
参数:使用同find
e.g. db.class2.findOne({age:17},{_id:0})	##表示不查找_id域,显示age = 17的所有文档

query 操作符的使用

比较操作符

    $eq   等于  = 

    e.g. 年龄等于17
         db.class0.find({age:{$eq:17}},{_id:0})

    $lt   小于  < 

    e.g.  姓名小于Tom (字符串也可以比较大小)
          db.class0.find({name:{$lt:"Tom"}},{_id:0})

    $gt   大于  >

    e.g. 找到大于16且小于19的 (条件文档中可以有多个键值对,多键值对为并且关系) 
        db.class0.find({age:{$gt:16,$lt:19}},{_id:0})

    $lte  小于等于  <=

       e.g.  db.class0.find({age:{$lte:17}},{_id:0})

    $gte  大于等于  >=
   
       e.g.  db.class0.find({age:{$gte:17}},{_id:0})

    $ne   不等于    !=

       e.g.  db.class0.find({age:{$ne:17}},{_id:0})

    $in   包含

       e.g. 查找年龄在数组范围中的文档
           db.class0.find({age:{$in:[16,18,20]}},{_id:0})

    $nin  不包含
	
       e.g. :查找年龄不在数组范围中的文档
             db.class0.find({age:{$nin:[17,19,21]}},{_id:0})

逻辑操作符

    1、表示逻辑与 
        1. 在query文档中逗号隔开的多个键值对即表示与关系

            e.g. 年龄等于17 并且 性别为女 
            db.class0.find({age:17,sex:'w'},{_id:0})
     
        2. $and  表示逻辑与
           
          e.g. 年龄等于17 并且 性别为女
          db.class0.find({$and:[{age:17},{sex:'w'}]},{_id:0})

    2、表示逻辑或  $or
       e.g.  年龄小于17 或者 性别为女
       db.class0.find({$or:[{age:{$lt:17}},{sex:'w'}]},{_id:0})


    3、表示逻辑非  $not 

       e.g.  年龄不大于17 
       db.class0.find({age:{$not:{$gt:17}}},{_id:0})

    4、表示逻辑既不也不  $nor   not (A or B)  (not A) and (not B)

      e.g.  既不是男生,年龄也不大于18
      db.class0.find({$nor:[{sex:'m'},{age:{$gt:18}}]},{_id:0})
     
    5、条件混合
        年龄(大于18 或者 小于17) 并且 要求性别为女

        db.class0.find({$or:[{age:{$gt:18}},{age:{$lt:17}}],sex:'w'},{_id:0})

        年龄大于等于17的男生   或者   姓名为Abby

        db.class0.find({$or:[{age:{$gte:17},sex:'m'},{name:'Abby'}]},{_id:0})

数组类型查找

数组 : 一组数据的有序集合 ,使用[]表示

  • 有序的
  • 数据类型可以不相同
    查找数组中包含某一项
         
       e.g. 查找score数组中包含90的文档
            db.class3.find({score:90},{_id:0})
     
    查找数组中同时包含多项  $all
	
       e.g. 查找score数组中同时包含88,90的文档
            db.class3.find({score:{$all:[88,90]}},{_id:0})

    根据数组项数查找  $size 
  	
       e.g. 查找数组中包含3项的文档
            db.class3.find({score:{$size:3}},{_id:0})

    选择数组的查询部分  $slice  (用于field参数)
      
       e.g.  显示数组的前两项
       db.class3.find({name:'小明'},{_id:0,score:{$slice:2}})
 
       e.g.  跳过数组第一项显示后面两项
    db.class3.find({name:'小明'},{_id:0,score:{$slice:[1,2]}})

其他查找操作符

	$exists  判断一个域是否存在 操作符值为bool
 
    e.g.查找不存在sex域的文档(false表示不存在,true表示存在)
        db.class0.find({sex:{$exists:false}},{_id:0})
 
    $mod   通过除数余数筛选文档
 
    e.g.  筛选年龄除以2余数为1的文档
        db.class0.find({age:{$mod:[2,1]}},{_id:0})

    $type  根据数据类型筛选
  
    e.g. 查找name数据类型为 ‘2’ 的文档
        db.class0.find({name:{$type:2}},{_id:0})
 
     * mongo数据类型和数字的对照参看文档
        
        double  : 1 
        string  : 2

     * 可以通过查看 www.mongodb.com 下的docs文档查找新的操作符使用方法

猜你喜欢

转载自blog.csdn.net/weixin_43278089/article/details/88385444
今日推荐