MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB 简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB 安装
- 从MongoDB官网下载mongodb,解压到本地文件夹
- 创建目录
data
与log
- 新增配置文件
数据存放目录
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
- 启动MongoDB,在安装目录下执行
./bin/mongod -f mongo.conf
- 连接测试
mongo --host 127.0.0.1 --port 27017
数据库操作
show dbs
查看数据库或者使用show databases
use dbname
: 如果数据库不存在则创建数据库,否则切换到数据库 要求:- 不能是空字符串
- 不能含有特殊字符空格,点,$
- 应该全部小写
- 不超过64字节 默认给我们提供的数据库:
- admin:
- local: 该数据库中的数据不会被复制,集群时不会相互复制
- config:用于分片设置时,用于保存分片的相关信息
db
查看当前的数据库db.dropDataBase
删除数据库
集合操作
- 显示创建集合
db.createCollection('name')
- 删除集合
db.name.drop()
- 查看集合
show collections
文档CRUD操作
- 文档插入
insert()
与save()
都可以,这样可以隐式的创建集合class
db.class.insert({"classid":"001","name":"语文","teacher":"0001"})
- 插入多条
insertMany()
,使用数组插入,批量插入出错时,可以使用trycatch
db.teacher.insertMany([
{"teacherid":"001","name":"zhangsan","age":23},
{"teacherid":"002","name":"lisi","age":24},
])
- 文档查询
find()
// 查询全部
db.teacher.find();
// 条件查询
db.teacher.find({"name":"lisi"})
// 投影查询 查询指定的列后一个参数指定列 1 代表查询 _id 可以通过指定0来排除
db.teacher.find({name:"lisi"},{age:1,name:1,_id:0});
- 使用try catch 貌似没什么用,需要再查查
try{
db.teacher.insertMany([
{"teacherid":"003","name":"wangwu","age":23},
{"teacherid":"004","name":"zhaoliu","age",24},
])
}catch(e){
print("err:"+e);
}
- 更新操作
// 语法 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}})
- 删除文档
//语法 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/
转载文章受原作者版权保护。转载请注明原作者出处!