MongoDB使用手册

782 阅读7分钟

MongoDB使用手册

theme: juejin
highlight: MongoDB使用手册

简介:

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。

一. 安装

官网点击下载 网盘点击下载

1. 下载MongoDB安装包,选择windows版;

在这里插入图片描述

2. 运行MongoDB安装包并选择自定义安装,设置好安装路径(可以选择自定义安装路径);
3. 配置MongoDB,让MongoDB作为服务运行,配置好数据目录和日志目录;
4. 最终可取消MongoDB Compass的安装选项(不取消安装极慢),需要可自行安装;
5. 双击mongo.exe 即可以运行MongoDB自带客户端,并使用MongoDB:

在这里插入图片描述

6. 连接成功后效果如下:

在这里插入图片描述

7. 如果需要移除MongoDB服务, 使用管理员权限运行cmd工具, 并输入如下命令结束进程:
> sc.exe delete MongoDB
8. 为了方便可通过网盘下载视图化的客户端工具进行使用。

二. MongoDB的使用

介绍:MongoDB是非关系型数据库当中最像关系型数据库的,所以我们通过它与关系型数据库的对比。
SQL数据库MongoDB数据库概念
databasedatabase数据库
tablecollection数据表(集合List)
rowdocument数据记录行(文档)
columnfield数据字段(域)
indexindex索引
primary keyprimary key主键,MongoDB自动将_id字段设置为主键
1. 创建库 use database_name 如果database_name数据库存在便进入该数据库中,如果不存在创建该数据库并进入数据库中。
> use database_name
switched to db database_name
2. 删除库 dropDatabase() 来删除(删除需慎重)
删除前:
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
mysql   0.000GB
test    0.000GB
删除:
> use mysql
switched to db mysql
> db
mysql
> db.dropDatabase()
{ "dropped" : "mysql", "ok" : 1 }
删除后:
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
3. 创建集合(sql中表的概念)db.createCollection()
> use dbtest
switched to db dbtest
> show tables
> db.createCollection('a1')
{ "ok" : 1 }
> show tables
a1
4. 删除集合(sql中表的概念)db.tables_name.drop()
> show tables
a1
> db.a1.drop()
true
> show tables
>
5. 插入文档document - sql新增记录行 db.table_name.insert(document)
> db
dbtest
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
> db.a1.insert({'username':'xiaoming','age':19,'password':'123','create_time':'2020-12-09 17:00:00'})
WriteResult({ "nInserted" : 1 })
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09590c0996d1ec790c72c"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
6. 更新文档 - 更新数据记录行
db.collection.update(<query>,<update>,{multi: <boolean>})
# query:修改的查询条件,类似于SQL中的WHERE部分
# update:更新属性的操作符,类似与SQL中的SET部分
# multi:设置为true时会更新所有符合条件的文档,默认为false只更新找到的第一条
> db
dbtest
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
> db.a1.insert({'username':'xiaoming','age':19,'password':'123','create_time':'2020-12-09 17:00:00'})
WriteResult({ "nInserted" : 1 })
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09590c0996d1ec790c72c"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
> db.a1.update({'username':'xiaoming'},{$set:{'age':20}},{multi:true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09590c0996d1ec790c72c"), "username" : "xiaoming", "age" : 20, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
> 
7. 删除文档 - 删除数据记录行 remove()
db.collection.remove(<query>,{justOne: <boolean>})
# query:删除的查询条件,类似于SQL中的WHERE部分
# justOne:设置为true只删除一条记录,默认为false删除所有记录
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09590c0996d1ec790c72c"), "username" : "xiaoming", "age" : 20, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
> db.a1.remove({'username':'xiaoming'},{justOne:true})
WriteResult({ "nRemoved" : 1 })
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
>
8. 通过collection对象的find()方法来查询文档
mongo符号含义mongo格式SQL语句
:等于{:}where a = 'b'
$lt小于{:{$lt:}}where a < 10
$gt大于{:{$gt:}}where a > 20
$lte小于等于{:{$lte:}}where a <= 10
$gte大于等于{:{$gte:}}where a >= 20
$ne不等于{:{$ne:}}where a != 30
db.collection.find(query, projection)
# query:查询条件,类似于SQL中的WHERE部分
# projection:可选,使用投影操作符指定返回的键
> db.a1.find()
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- 等于
> db.a1.find({'age':22})
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- 小于
> db.a1.find({'age':{$lt:20}})
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- 小于等于
> db.a1.find({'age':{$lte:19}})
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- 大于
> db.a1.find({'age':{$gt:19}})
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- 大于等于
> db.a1.find({'age':{$gte:343}})
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- 不等于
> db.a1.find({'age':{$ne:343}})
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- and
> db.a1.find({'age':{$ne:343},'username':'xiaoming'})
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
> db.a1.find({'age':{$ne:343},'username':'xiaoming1'})
>
# 按条件查询 -- or
> db.a1.find({$or:[{'age':{$ne:343}},{'username':'xiaoming'}]})
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
# 按条件查询 -- and+or
> db.a1.find({'age':{$lt:22}},{$or:[{'age':{$ne:343}},{'username':'xiaoming'}]})
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc") }
> db.a1.find({'age':{$gt:22}},{$or:[{'age':{$ne:343}},{'username':'xiaoming'}]})
{ "_id" : ObjectId("5fd09c967cb5fe86451090be") }
9. 其他操作
limit(指定长度数据)与skip(跳过某些数量)
> db.a1.find().limit(2)
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }

> db.a1.find().limit(3).skip(2)
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
> db.a1.find().limit(3).skip(1)
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
sort(排序)升序 1,降序 -1
# 升序
db.a1.find().sort({'age':1})
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }

# 降序
> db.a1.find().sort({'age':-1})
{ "_id" : ObjectId("5fd09c967cb5fe86451090be"), "username" : "xiaoming", "age" : 343, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09c8c7cb5fe86451090bd"), "username" : "xiaoming", "age" : 22, "password" : "1234", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd09b0b7cb5fe86451090bc"), "username" : "xiaoming", "age" : 19, "password" : "123", "create_time" : "2020-12-09 17:00:00" }
{ "_id" : ObjectId("5fd092ffc0996d1ec790c72a") }
索引 createIndex()
db.collection.createIndex(keys, options)
# background:建索引过程会阻塞其它数据库操作,设置为true表示后台创建,默认为false
# unique:设置为true表示创建唯一索引
# name:指定索引名称,如果没有指定会自动生成
# {'age':1}  1 :升序; -1 :降序
# 普通索引
> db.a1.createIndex({'age':1},{background:true}) 
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

# 唯一索引
> db.a1.createIndex({'_id':1},{unique:true})
{
        "ok" : 0,
        "errmsg" : "The field 'unique' is not valid for an _id index specification. Specification: { ns: \"dbtest.a1\", v: 2, key: { _id: 1.0 }, name: \"_id_1\", unique: true }",
        "code" : 197,
        "codeName" : "InvalidIndexSpecificationOption"
}

# 查看索引 
> db.a1.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "dbtest.a1"
        },
        {
                "v" : 2,
                "key" : {
                        "age" : 1
                },
                "name" : "age_1",
                "ns" : "dbtest.a1",
                "background" : true
        }
]
10. 聚合函数
操作符描述
$sum计算总和
$avg计算平均值
$min计算最小值
$max计算最大值
# 计算总和
> db.a1.aggregate([{$group : {_id : "$by", sum_count : {$sum : 1}}}])
{ "_id" : null, "sum_count" : 4 }
# 计算平均值
> db.a1.aggregate([{$group : {_id : "$by", avg_age : {$avg : "$age"}}}])
{ "_id" : null, "avg_age" : 128 }
11. 正则表达式
# 不区分大小写的模糊查询,使用$options操作符
db.a1.find({title:{$regex:"elasticsearch",$options:"$i"}})