zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    Redhat6.4安装MongoDBv3.6.3
    windows模糊查询指定进程是否存在
    Linux普通用户不能使用TAB键、上下键
    零基础Python爬虫实现(百度贴吧)
    零基础Python爬虫实现(爬取最新电影排行)
    让bat批处理后台运行,不显示cmd窗口(完全静化)
    根据进程名监控进程(邮件提醒)
    android 开发中,必须要注意的知识点. (持续更新)
    Android上传文件至服务器
    为应用添加多个Activity与参数传递
  • 原文地址:https://www.cnblogs.com/Zachariah9426/p/10796361.html
Copyright © 2011-2022 走看看