MongoDB初识——安装连接(centos)
这一节介绍一下 MongoDB 基本的使用方法,增删改查。
首先简单说明一下 mongo 的三层逻辑存储结构:
数据库(db), 集合(collection), 文档(document)
数据库包含多个集合,集合包含多个文档,文档以Json格式存储。
和关系型数据库的对应关系如下
MongDB | Mysql |
---|---|
数据库 | 数据库 |
集合 | 表 |
文档 | 行 |
下面用了一个demo 介绍 MongDB 增删改查的常用语句,相比于一般教程的分类介绍,能够让大家更快上手。
> show dbs
admin 0.000GB
local 0.000GB
# 初始默认有两个数据库
> use test
switched to db test
# 如果数据库不存在,则创建数据库,否则切换到指定数据库
> show dbs
admin 0.000GB
local 0.000GB
# 新建的数据库里还没有数据,查询的时候不会显示
> db
test
# 显示当前数据库
> db.createCollection("user")
{ "ok" : 1 }
# 创建集合
> db.event.insert({'event_id': 1, 'user_id': 1001, 'date': '2018-11-01'})
WriteResult({ "nInserted" : 1 })
# 向 event集合 中插入一条记录
# 这里 event集合 在插入前是不存在,MongoDB会在插入时自动创建集合
> show collections
event
user
# 查看数据库里的所有集合
> db.event.find()
{ "_id" : ObjectId("5bf8bdd866b7ff931f9e0c4f"), "event_id" : 1, "user_id" : 1001, "date" : "2018-11-01" }
# 查找集合里的所有记录,这里我们看到,除了我们插入的信息外,MongoDB 还会为每个文档生成一个全局唯一的 ObjectId
> db.event.insertMany([
... {'event_id': 1, 'user_id': 1002, 'date': '2018-11-02'}
... ,{'event_id': 2, 'user_id': 1002, 'date': '2018-11-02'}
... ,{'event_id': 3, 'user_id': 1002, 'date': '2018-11-02'}
... ,{'event_id': 1, 'user_id': 1003, 'date': '2018-11-03'}
... ,{'event_id': 1, 'user_id': 1004, 'date': '2018-11-03'}
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5bf9e69d94e9e4d631b4e5bb"),
ObjectId("5bf9e69d94e9e4d631b4e5bc"),
ObjectId("5bf9e69d94e9e4d631b4e5bd"),
ObjectId("5bf9e69d94e9e4d631b4e5be"),
ObjectId("5bf9e69d94e9e4d631b4e5bf")
]
}
# 我们多插入几条记录, 使用 insertMany
> db.event.find()
{ "_id" : ObjectId("5bf9e64d94e9e4d631b4e5ba"), "event_id" : 1, "user_id" : 1001, "date" : "2018-11-01" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bb"), "event_id" : 1, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bc"), "event_id" : 2, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bd"), "event_id" : 3, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5be"), "event_id" : 1, "user_id" : 1003, "date" : "2018-11-03" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bf"), "event_id" : 1, "user_id" : 1004, "date" : "2018-11-03" }
# 查看插入结果
> db.event.find({'event_id':3})
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bd"), "event_id" : 3, "user_id" : 1002, "date" : "2018-11-02" }
# 条件查找
> db.event.find({'event_id':3}, {"event_id":3, "user_id": 1002}).pretty()
{
"_id" : ObjectId("5bf9e69d94e9e4d631b4e5bd"),
"event_id" : 3,
"user_id" : 1002
}
# db.event.find(query, projection)
# 第一个大括号里是查询条件,第二个大括号里是字段选择
# 字段 "_id" 默认是1,如果查找的时候不返回需要添加 "_id":0, 其他字段默认是0,
# .pretty() 把每一列分行输出,方便查看
> db.event.updateOne({"date":"2018-11-02"}, {$set:{"date": "2018-11-05"}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
# updateOne 只修改一条文档
> db.event.updateMany({"date":"2018-11-03"}, {$set:{"date": "2018-11-06"}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
# updateMany 修改所有匹配文档
# 可以使用update, 通过参数设置实现前两者的功能,不多做介绍
> db.event.find()
{ "_id" : ObjectId("5bf9e64d94e9e4d631b4e5ba"), "event_id" : 1, "user_id" : 1001, "date" : "2018-11-01" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bb"), "event_id" : 1, "user_id" : 1002, "date" : "2018-11-05" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bc"), "event_id" : 2, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bd"), "event_id" : 3, "user_id" : 1002, "date" : "2018-11-02" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5be"), "event_id" : 1, "user_id" : 1003, "date" : "2018-11-06" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bf"), "event_id" : 1, "user_id" : 1004, "date" : "2018-11-06" }
# 查看两次修改的结果
> db.event.deleteOne({"date": "2018-11-02"})
{ "acknowledged" : true, "deletedCount" : 1 }
# deleteOne 删除单个文档
> db.event.deleteMany({"date": "2018-11-06"})
{ "acknowledged" : true, "deletedCount" : 2 }
# deleteMany 删除所有匹配文档, 不加条件会删除所有文档
# 类似更新,也可以使用 remove 函数替代
> db.event.find()
> db.event.find()
{ "_id" : ObjectId("5bf9e64d94e9e4d631b4e5ba"), "event_id" : 1, "user_id" : 1001, "date" : "2018-11-01" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bb"), "event_id" : 1, "user_id" : 1002, "date" : "2018-11-05" }
{ "_id" : ObjectId("5bf9e69d94e9e4d631b4e5bd"), "event_id" : 3, "user_id" : 1002, "date" : "2018-11-02" }
# 查看两次删除后的结果
> db.event.drop()
true
# 删除集合
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
# 删除数据库
MongoDB 的基本使用方法就介绍完了,想了解更多,请看下一节:
MongoDB进阶——高级查询和聚合统计