MongoDB笔记

MongoDB的使用

数据库的操作

库操作

  • 查看所有数据库:show databases;或者show dbs;

  • 查看当前所在数据库:db;
  • 创建数据库:mongodb是隐式创建的,就是所有的库和集合这些都不用事先创建,只需要往其中插入数据,就会自动创建了
  • 切换数据库: use db_name;
  • 删除数据库,use切换到你要上删除的数据库, 然后db.dropDatabase(),慎用,慎用,慎用!!!

集合操作

  • 不手动创建集合,向不存在的集合中第一次插入数据的时候,集合就会被创建出来
  • 手动创建集合db.createCollection(col_name);例:
    • db.createCollection("students");,创建无上限的集合
    • db.createCollection('students', {capped:true, size:100});,创建有上限的集合
      • 参数capped: 默认值为false,表示不设置上限,值为true时表示设置上限
      • 参数size: 当capped为true时,需要设置这个参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
  • 查看集合:show tables或者show collections;
  • 删除集合:db.col_name.drop();,慎用,慎用,慎用!!!

MongoDB中可以存储的数据类型

  • Object ID: 文档ID,就是我们存入数据库的一条一条的数据(json字符串),每一条数据都有唯一的一个_id,用来保证数据的唯一性,这个id如果我们没有指定的时候,MongoDB会自动给我们生成,所有MongoDB中是可以插入重复数据的
    • object ID是一个12字节的十六进制数
      { "_id" : ObjectId("5cc7c827ca11d7964bf34682"), "name" : "xxx", "age" : 23, "gender" : "男", "date" : ISODate("2019-04-20T00:00:00Z") }
      • 前四个字节是当前时间戳
      • 接下来的3个字节是机器ID
      • 接下来的2个字节是MongoDB中的进程id
      • 最后3个字节是简单的增量值
  • String: 字符串,也是最常用的,必须是有效的UTF-8
  • Boolean:存储⼀个布尔值, true或false
  • Integer:整数可以是32位或64位,这取决于服务器
  • Double: 存储浮点值
  • Arrays: 数组或列表, 多个值存储到⼀个键
  • Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
  • Null: 存储Null值
  • Timestam: 时间戳,表示从1970-1-1到现在的总秒数
  • Date: 存储当前⽇期或时间的UNIX时间格式
    • 创建日期:new Data('2019-04-20'),参数的格式为YYYY-MM-DD
      > new Date("2019-04-20")
      ISODate("2019-04-20T00:00:00Z")
    • 当我们要在python中插入这个格式的时间时,可以使用datetime
      In [7]: import datetime
      In [8]: datetime.datetime.now()
      Out[8]: datetime.datetime(2019, 4, 30, 12, 4, 3, 747476)
      In [9]:

集合中数据的操作(CRUD)

添加数据

  • 插入单条数据: db.col_name.insert({'name':'yyy', 'age':22, 'date':new Date("2019-03-11")}), 插入的数据可以写成个字典插入或者json字符串,_id存在就报错
  • 插入多条数据: db.col_name.insert([{key:value, key1:value1...},{key:value, key1:value1...},{},{}...... ]), 每一条数据都是一个字典或者json字符串,_id存在就报错
  • 保存 :db.col_name.save({}),如果文档中的id已经存在就修改,如果文档id不存在则添加,id存在就修改

修改数据

  • db.xxx.update({name:'xiaohua'},{name:'xiaomei'}),把name为xiaohua的整条数据修改成name为xiaomei, 基本不会这样用
  • db.xxx.update({name:'xiaohua'},{$set{age:'21'}}),把name为xiaohua的数据的age值修改为99, 只修改name的值,其他字段信息不变, 默认修改一条
  • db.xxx.update({name:'xiaohua'},{$set{age:'22'}}, {multi:true}),会把name为xiaohua的所有数据的age值改为22,修改符合条件的所有数据的值
  • 注意! multi只能和$一起使用

删除数据

  • db.集合名称.remove(,{justOne: }) boolean为false时,表示删除全部,为true时删除一条

  • db.col_name.remove({})删除集合中的所有数据,慎用,慎用,慎用!!!
  • db.xxx.remove({age:20}, {justOne:true}): 删除一条满足条件的
  • db.xxx.remove({age:20}, {justOne:false}): 删除所有满足条件的

查询数据

  • db.集合名称.find({条件⽂档})
  • db.xxx.find({}):查询所有集合中的文档
  • db.xxx.findOne({name:'xiaohua'}) : 查询name为xiaohua的第一条数据
  • db.xxx.find({name:'xiaohua'}).pretty(): 查询name为xiaohua的所有数据, pretty()把查询结果美化输出
  • db.xxx.find({name:'xiaohua'}, {_id:false})查询所有name为xiaohua的数据,指定查询结果不显示_id,查询时通过指定字段为false还是true可以控制输出哪些要显示的信息
  • 查询中的比较运算符
    • 等于: 默认是等于判断,没有运算符
      • 上面的所有查询都是等于操作
    • 大于:$gt
      • db.xxx.find({age:{$gt:22}})查询所有age大于22的数据
    • 大于等于: $gte
      • db.xxx.find({age:{$gte:22}}) 查询所有age大于等于22的数据
    • 小于: $lt
      • db.xxx.find({age:{$lt:20}}) 查询所有age小于20的数据
    • 小于等于: $lte
      • db.xxx.find({age:{$lte:20}})查询所有age小于等于20的数据
    • 不等于: $ne
      • db.xxx.find({age:{$ne:20}}) 查询所有age不等于20的数据
  • 范围运算符
    • 判断是否在某个范围内:$nin
      • db.xxx.find(age{$in:[18,20,25]}) 查询age为18,20,25的所有数据
      • db.xxx.find(age{age{$nin:[18,20,25]}})查询age不是18,20,25的所有数据
    • and:在查询语句中写多个条件即可
      • db.xxx.find({name:"yyy", age:20}) 查询name为yyy,age为20的数据
    • or:使⽤$or,值为数组, 数组中每个元素为json
      • db.xxx.find({$or:[{age:{$gt:18}},{gender:'F'}]})查询age大于18或者gender为F的数据
    • 查询年龄age18或gender为F, 并且姓名是gj
      • db.xxx.find({$or:[{age:{$gte:18}},{gender:F}],name:'gj'})
  • 正则表达式
    • 使用//或者$regex编写正则表达式
    • db.xxx.find({name:/^张/})/db.xxx.find({name:{$regex:"^张"}})查询所有以张开头的数据

⽅法limit():

  • ⽤于读取指定数量的⽂档

  • db.集合名称.find().limit(NUMBER)

  • 查询2条学⽣信息
    • db.stu.find().limit(2)

⽅法skip():

  • ⽤于跳过指定数量的⽂档
  • db.集合名称.find().skip(NUMBER)
    • db.xxx.find().skip(2)
  • 同时使用
    • db.xxx.find().limit(4).skip(5)
    • db.xxx.find().skip(5).limit(4)

排序sort()

  • db.xxx.find().sort({age:1})按照age升序
  • db.xxx.find().sort({age:-1})按照age降序

统计个数count()

  • ⽅法count()⽤于统计结果集中⽂档条数
  • db.col_name.find({条件}).count() 统计查询出来的结果
  • db.col_name.count({条件})
    • db.col_name.count({age:{$lt:20}})统计age小于20的数据数量

消除重复distinct()

  • db.col_name.distinct("去重字段", {条件})
    • db.xxx.distinct("age")去重age字段
    • db.xxx.distinct("age", {age:{$gt:20}})对age大于20的数据去重

数据备份和恢复
在终端执行

备份的语法:

  • mongodump -hdbhost:port -d dbname -o dbdirectory
  • -h:服务器地址,也可以指定端⼝号
  • port:端口
  • -d:需要备份的数据库名称
  • -o:备份的数据存放位置, 此⽬录中存放着备份出来的数据
  • mongodump -h 192.168.26.133 -d test -o /home/pyvip/mongoDB

恢复语法:

  • mongorestore -h dbhost:port -d dbname --dir dbdirectory
    • -h: 服务器地址
    • port:端口
    • -d: 需要恢复的数据库实例
    • --dir: 备份数据所在位置
    • mongorestore -h 192.168.26.133:27017 -d test --dir /home/pyvip/mongoDB

聚合aggregate()

转载于:https://www.cnblogs.com/jincieryi1120/p/10796361.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值