MongoDB 基础概念与操作解析

前言

在前一章内MongoDB 安装(Mac), 我们介绍了基本的MongdoDB的安装. 本章我们继续接着上章的内容继续.

最近眼疾较为严重, 所以许久没更新了. 各位, 在工作和生活的时候多进行运动, 多保护自己的身体. 不要被剥削和洗脑的太过严重!


基本概念

我们都知道, 在Mysql内,我们经常将操作语言分为DML和DDL. 前者为表的相关操作&权限的相关操作等. 后者, 主要基于创建的表进行CURD的操作. 其实, 个人认为, 在MongoDB的使用过程中, 完全也可以这样进行划分.

在SQL型数据库内, 我们的一等公民为数据库-表-列-记录, 而在MondoDB内, 一等公民则为数据库-集合-列-文档

其实这也不是特别难以理解. 引用Runoob的表格和图片来形容, 对比如下所示:

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

在这里插入图片描述


基本操作(启动&客户端链接)

关于MongoDB的启动与客户端的链接, 我们在上章已经提过了. 这边简单的提一下.

  • 启动
localhost:MongoDB Sean$ mongod --dbpath=/Users/Sean/Software/MongoDB/data/db
  • 本地链接
localhost:~ Sean$ mongo
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
	http://docs.mongodb.org/
Questions? Try the support group
	http://groups.google.com/group/mongodb-user
Server has startup warnings:
2019-05-10T17:09:07.681+0800 I CONTROL  [initandlisten]
2019-05-10T17:09:07.681+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-05-10T17:09:07.681+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-05-10T17:09:07.681+0800 I CONTROL  [initandlisten]

远程链接 mongo 192.168.100.21:27017
具体操作与链接的权限操作, 参考这篇文章. 这边就不详细讨论了.
mongodb远程连接配置


基本操作(集合&数据库相关操作)

  • 查看所有数据库
> show dbs
admin  0.000GB
local  0.000GB
  • 查看当前使用的数据库
> db
test
  • 创建简单的对象&查看时间戳
> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2019-05-10T09:16:13Z")
> newObject.str
5cd5415de6b987425bc13717
  • 创建新的数据库
> use yanxml
switched to db yanxml
> db
yanxml
> show dbs
admin  0.000GB
local  0.000GB
> db
yanxml
# 可以看见 这边并没有真正创建数据库(需要数据库内填充数据后,才真正创建)
> show dbs
admin  0.000GB
local  0.000GB
> db.yanxml.insert({"name":"www.yanxml.com"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin   0.000GB
local   0.000GB
yanxml  0.000GB
  • 查看Collection
> show tables
yanxml
  • 创建Collection
> db.createCollection("yanxml_collection")
{ "ok" : 1 }
> show tables
yanxml
yanxml_collection
  • 删除Collection
> db.yanxml_collection.drop()
true
> show tables
yanxml
  • 创建固定长度的Collection
# 这边是创建失败了
> show db.createCollection("mycol", { capped : true, autoIndexId : true, size :
...    6142800, max : 10000 } )
2019-05-10T17:26:09.266+0800 E QUERY    [thread1] SyntaxError: missing ) after argument list @(shellhelp2):1:45
> show tables
yanxml
> db.createCollection("mycol", { capped : true, autoIndexId : true, size :
...    6142800, max : 10000 } )
{
	"note" : "the autoIndexId option is deprecated and will be removed in a future release",
	"ok" : 1
}
> show tables
mycol
yanxml
>

基本操作(CURD相关操作)

  • 插入文档(insert)
db.COLLECTION_NAME.insert(document)
# 示例
>db.col.insert({title: 'MongoDB 教程', 
    by: 'yanxml',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})
  • 插入文档(save)
db.col.save(document) 

# 示例
# 定义文档
> document=({title: 'MongoDB 教程', 
    by: 'yanxml',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});

# 插入文档
> db.col.insert(document)
WriteResult({ "nInserted" : 1 })
  • 更新文档
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

# 示例
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如,,inc…)等,也可以理解为sql >* update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入
  • objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
  • 删除文档
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

# 示例
>db.col.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 })           # 删除了两条数据

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。
  • 删除所有数据
>db.col.remove({})
  • 查询文档
db.collection.find(query, projection)
# 示例
db.col.find()
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
  • 查询文档(格式化读取)
>db.col.find().pretty()
  • 查询文档(Where)
操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({“by”:“菜鸟教程”}).pretty() where by = ‘菜鸟教程’
小于 {<key>:{$lt:<value>}} db.col.find({“likes”:{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({“likes”:{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({“likes”:{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({“likes”:{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({“likes”:{$ne:50}}).pretty() where likes != 50
  • 查询文档(AND)
>db.col.find({key1:value1, key2:value2}).pretty()
# 示例
> db.col.find({"by":"教程", "title":"MongoDB 教程"}).pretty()
  • 查询文档(OR)
>db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
# 示例
>db.col.find({$or:[{"by":"教程"},{"title": "MongoDB 教程"}]}).pretty()
  • 查询文档(AND & OR)
>db.col.find({"likes": {$gt:50}, $or: [{"by": "教程"},{"title": "MongoDB 教程"}]}).pretty()
  • 查询文档(正则表达式)
>db.posts.find({post_text:{$regex:"yanxml"}})
>db.posts.find({post_text:/yanxml/})
# 不区分大小写
>db.posts.find({post_text:{$regex:"yanxml",$options:"$i"}})

Others

更加深入的了解, 后面应当是:

  • 搜索
  • 正则表达式
  • 分片创建和管理数据库
  • 索引
  • Java API
  • MongdoDB数据底层 & 与Mysql传统数据库底层B+树的区别

由于本人用的不是特别多, 这部分的内容暂且挂起. 等有时间的时候进行研究.


Reference

[1]. MongoDB 教程

展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值