MongoDB笔记(一)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 简介

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 安装

  1. MongoDB官网下载mongodb,解压到本地文件夹
  2. 创建目录 datalog
  3. 新增配置文件
数据存放目录
dbpath=/Users/sure/opt/mongodb-macos-x86_64-4.2.9/data

指定端口号
port=27017

指定日志文件
logpath=/Users/sure/opt/mongodb-macos-x86_64-4.2.9/log/master.log
写日志的模式:设置为true为追加,默认覆盖,如未指定启动时将覆盖原日志文件
logappend=true
是否后台执行 默认为false
fork=true

最大连接数
maxConns=4000

用户认证,默认false,不需要认证,进入数据库需要auth认证
当数据库没有用户,则不需要验证也可以,创建用户之后都要验证
auth = true
  1. 启动MongoDB,在安装目录下执行 ./bin/mongod -f mongo.conf
  2. 连接测试 mongo --host 127.0.0.1 --port 27017

数据库操作

  1. show dbs查看数据库或者使用 show databases
  2. use dbname : 如果数据库不存在则创建数据库,否则切换到数据库 要求:
  3. 不能是空字符串
  4. 不能含有特殊字符空格,点,$
  5. 应该全部小写
  6. 不超过64字节 默认给我们提供的数据库:
  7. admin:
  8. local: 该数据库中的数据不会被复制,集群时不会相互复制
  9. config:用于分片设置时,用于保存分片的相关信息
  10. db 查看当前的数据库
  11. db.dropDataBase 删除数据库
    MongoDB笔记(一)

集合操作

  1. 显示创建集合 db.createCollection('name')
  2. 删除集合 db.name.drop()
  3. 查看集合 show collections

文档CRUD操作

  1. 文档插入 insert()save()都可以,这样可以隐式的创建集合class
db.class.insert({"classid":"001","name":"语文","teacher":"0001"})
  1. 插入多条 insertMany(),使用数组插入,批量插入出错时,可以使用trycatch
db.teacher.insertMany([
  {"teacherid":"001","name":"zhangsan","age":23},
  {"teacherid":"002","name":"lisi","age":24},
])
  1. 文档查询 find()
// 查询全部
db.teacher.find();
// 条件查询
db.teacher.find({"name":"lisi"})
// 投影查询   查询指定的列后一个参数指定列 1 代表查询  _id 可以通过指定0来排除
db.teacher.find({name:"lisi"},{age:1,name:1,_id:0});
  1. 使用try catch 貌似没什么用,需要再查查
try{
  db.teacher.insertMany([
    {"teacherid":"003","name":"wangwu","age":23},
    {"teacherid":"004","name":"zhaoliu","age",24},
  ])
}catch(e){
  print("err:"+e);
}
  1. 更新操作
// 语法 db.teacher.update(query,updatedata,option)
// 1. 覆盖修改 直接将对象更新为 第二个参数
db.teacher.update({name:"zhangsan"},{age:26})

// 2. 局部修改 使用$set
db.teacher.update({name:"zhangsan"},{$set:{age:26}});

// 3. 批量修改  mongodb 默认只修改匹配的第一条数据  要想修改多条就要使用参数了 option
db.teacher.update({name:"lisi"},{$set:{age:28}},{multi:true})

// 4. 列值增长 年龄增长一岁
db.teacher.update({name:"zhangsan"},{$inc:{age:1}})

  1. 删除文档
//语法 db.teacher.remove(条件)
// 1.全部删除  谨慎使用
db.teacher.remove({})

// 2.条件删除
db.teacher.remove({teacherid:"003"})

分页查询

1. 统计查询

// 语法 db.teacher.count(query,options)

// 1. 查询全部
db.teacher.count();

// 2. 条件查询
db.teacher.count({name:"zhangsan"});

2. 分页查询

/*
* db.teacher.find().limit().skip()
* limit()读取指定数量的数据 默认20
* skip() 跳过指定数量的数据
*/

// 查询前两条
db.teacher.find({age:24}).limit(2)

// 查询第二页
db.teacher.find({age:24}).limit(2).skip(2)

3. 排序查询

使用sort()对数据进行排序,sort()中指定排序的字段,用1表示升序 -1表示降序

db.teacher.find().sort({age:1,name:-1})

复杂查询

1. 正则查询

Mongodb 支持js中的正则查询

db.teacher.find({name:/zh/})

db.teacher.find({name:/^zh/})

2. 比较查询

// 大于  >
db.teacher.find({age:{$gt:23}})
// 大于等于 >=
db.teacher.find({age:{$gte:23}})
// 小于 <
db.teacher.find({age:{$lt:23}})
// 小于等于

3. 包含查询

// 类比mysql in
db.teacher.find({age:{$in:[23]}})

//not in
db.teacher.find({age:{$nin:[23]}})

4. 条件连接查询

// and 查询 {$and:[{},{},{}]
db.teacher.find({$and:[{_id:{$gt:3}},{age:{$gt:24}}]})//id>3 并且 age>24

// or 查询 {$or:[{},{},{}]
db.teacher.find({$or:[{_id:{$gt:3}},{age:{$gt:24}}]})

索引

如果没有索引,MongoDB在执行查询的时候必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。MongoDB的索引采用B树的数据结构

1. 索引的类型

  • 单字段索引 在单个字段上按照升序或降序创建索引
  • 复合索引 在多个字段上创建索引,并且可以指定某个字段升序或降序
  • 其他索引 地理空间索引、文本索引、哈希索引

2. 索引操作

1.查看索引

// 获取索引 以数据形式返回
db.teacher.getIndex();
// 返回结果
[
    {
        "v" : 2,  // 索引版本
        "key" : { // 索引的字段
            "_id" : 1  // 以 _id 为索引 按升序排序
        },
        "name" : "_id_", // 索引名字
        "ns" : "articledb.teacher" //命名空间
    }
]

2.创建索引

// db.teacher.createIndex(keys,options);

// 创建单字段索引
db.class.createIndex({classid:1})
//获取索引
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "articledb.class"
    },
    {
        "v" : 2,
        "key" : {
            "classid" : 1
        },
        "name" : "classid_1",//默认索引名称加排序方式
        "ns" : "articledb.class"
    }
]

// 创建复合索引
db.class.createIndex({classid:1,name:-1},{name:"class_name_index"})
//获取索引
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "articledb.class"
    },
    {
        "v" : 2,
        "key" : {
            "classid" : 1
        },
        "name" : "classid_1",
        "ns" : "articledb.class"
    },
    {
        "v" : 2,
        "key" : {
            "classid" : 1,
            "name" : -1
        },
        "name" : "class_name_index",//指定的索引名称
        "ns" : "articledb.class"
    }
]

3. 删除索引

// 语法 db.class.dropIndex(name); 可以根据名称去删  也可以根据具体的索引字段去删除

db.class.dropIndex({classid:1});

db.class.dropIndex("class_name_index");

// 删除所有索引
db.class.dropIndexes();

Original: https://www.cnblogs.com/cnsure/p/15490444.html
Author: 观书喜夜长
Title: MongoDB笔记(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713877/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球