MongoDB基础学习笔记
2019-01-15 本文已影响0人
let423
基础知识
特点
- 是一个面向文档存储的数据库,操作起来比较简单和容易
- 可以在 MongoDB 记录中设置任何属性的索引值
- 可以通过本地或者网络创建数据镜像
一些术语
SQL术语 | MongoDB术语 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | - | 表连接,MongoDB不支持 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据库
- 一个 MongoDB 可以建立多个数据库
- "show dbs"可以显示所有数据的列表
- 数据库不能是空字符串、不得含有空格、空字符
- 应全部小写
- 最多64字节
- 特殊数据库:admin、local、config
文档
- 文档是一组键值对(BSON)
- take care:
(1) 文档中的键值对是有序的
(2) 文档中的值不仅可以是字符串,也可以是其它几种数据类型
(3) MongDB 的文档不能有重复的键
(4) MongoDB 区分类型和大小写
(5) 文档的键是字符串,除了少数例外的情况,键可以使用任意UTF-8字符
- 文档键命名规范
(1)不能含有空字符,这个字符用来表示键的结尾
(2). 和 $ 有特别的意义,只有在特定环境下才能使用
(3)以下划线开头的键是保留的
集合
- 集合就是MongoDB的文档组
- 集合存在于数据库,没有固定的结构
objectId
- 类似唯一地主键,可以很快去生成和排序,包含了12bytes, 4时间戳--3机器标识码--2PID--3随机数
- 可以通过getTimestamp函数来获取到文档的创建时间
# 取文档的创建时间:
> var newObject = ObjectId()
> newObject.getTimestamp()
ISODate("2017-11-25T07:21:10Z")
# ObjectId转为字符串:
> newObject.str
5a1919e63df83ce79df8b38f
相关操作
MongoDB创建数据库
- 创建数据库
> use mydatabase
switched to db runoob
> db
mydatabase
>
- 查看数据库
> show dbs
> db
MongoDB删除数据库
- db.dropDatabse()
- db.collecion.drop() 删除集合,其中collection是集合的名字
MongoDB创建集合
- db.createCollection(name, options)
name
要创建的集合名称
options
指定有关内存大小以及索引的选项 - 在MongoDB中,不需要创建集合,当需要插入文档时,MongoDB会自动创建集合
MogonDB删除集合
- db.collection.drop()
返回值:删除成功返回true,否则返回false - show collcetions 查看已存在的集合
MongoDB插入文档
- 使用insert()或save()方法向集合中插入文档
db.COLLECTION_NAME.insert(document).insert(document)
MongoDB更新文档
- update()用于更新已经存在的文档
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
})
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
- save() 方法通过传入的文档来替换已有文档
db.collection.save(
<document>,
{
writeConcern: <document>
})
>db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110})
MongoDB删除文档
- remove()函数是用来移除集合中的数据
- 语法:
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
})
MongoDB查询文档
db.collection.find() 以非结构化的方式来显示所有文档
db.collection.find().pretty() 以易读的方式来读取数据
db.collection.findOne() 只返回一个文档
- MongoDB与RDBMS 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 |
- MongoDB AND条件
>db.col.find({key1:value1, key2:value2}).pretty()
- MongoDB OR条件
>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
- AND和OR联合使用
>db.col.find({"likes": {$gt:50}, $or: [{"by": "someone"},{"title": "MongoDB 教程"}]}).pretty()
MongoDB条件操作符
符号 | 解释 |
---|---|
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
MongoDB Limit与Skip方法
- limit() 在MongoDB中读取指定数量的数据记录
>db.COLLECTION_NAME.find().limit(NUMBER)
- skip() 来跳过指定数量的数据,接受一个数字参数作为跳过的记录条数,skip()方法默认参数为0
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
MongoDB 排序
1.sort () 方法可以通过指定参数指定排序的字段, 并使用 1
和 -1
来指定排序的方式,其中 1 为升序
排序,-1 为降序
排序
2.语法:
>db.COLLECTION_NAME.find().sort({KEY:1})
MongoDB 索引
- 索引的作用:能够极大的提高查询的效率
- 创建索引:createIndex()
>db.collection.createIndex(keys, options)
说明:key值为要创建的索引字段,1为按升序创建索引,-1为按降序创建索引
MongoDB 聚合
- MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和),并返回计算后的数据结果。
- 语法:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
学习链接
官方文档:https://docs.mongodb.com/
菜鸟教程:http://www.runoob.com/mongodb/mongodb-tutorial.html