数据库/表操作
最后更新于:2022-04-02 03:59:41
[TOC]
## 数据库操作
### 创建数据库
`use test`
### 展示所有数据库
```
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
```
### 删除数据库
```
use test
db.dropDatabase()
```
## 集合(表)
### 创建集合
demo
```
use test
db.createCollection("runoob")
```
创建带参数集合,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个(超过会覆盖旧数据)
```
db.createCollection("runoob", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
```
插入时,自动创建集合
```
db.runoob.insert({"name" : "菜鸟教程"})
```
### 列出集合
```
show tables
```
### 删除集合
```
use test
db.集合名.drop()
```
## 插入
### 插入数据时,自动创建
在数据库中添加记录,如果集合不存在会自动创建
```
//切换/创建库
use demo2
//在表test 中插入数据,如果表不存在就添加
db.test.insert({"name":"123",tags: ['mongodb', 'database', 'NoSQL']})
```
如果不指定 \_id 字段 save() 方法类似于 insert() 方法。如果指定 \_id 字段,则会更新该 \_id 的数据
### update 更新
```
db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
```
### update 更新一条
`db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})`
把 title等于 `MongoDB 教程` 更新为 `MongoDB`
### update 更新多条
`db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})`
更新数组中的数据
`db.friend.update({
"friends.group.userid":"222"}, {$set:{"friends.group.$.user_status":"p"}}, {multi:true})`
### save 数据更替
如果 save 中 `_id` 值一样,就进行整体替换
## 删除
```
db.collection.remove(
,
{
justOne: ,
writeConcern:
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
```
### 删多条
实例:移除title 为`MongoDB 教程`的数据
```
>db.test.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 }) # 删除了两条数据
```
### 删一条
```
>db.test.remove({'title':'MongoDB 教程'},1)
```
### 清空
```
>db.test.remove()
```
## 查询
格式
```
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
```
### projection
#### inclusion 指定返回的键,不返回其他键
```
db.test.find({}, {title: 1, url: 1}) //只返回 title,与url
```
#### exclusion模式 指定不返回的键,返回其他键
```
db.test.find({}, {title: 0, url: 0}) //返回排除 title 与url
```
> inclusion 与 exclustion 不能混用
> _id 键默认返回,需要主动指定 _id:0 才会隐藏 `db.test.find({}, {title: 1, _id: 0}) // 只返回 title`
### where 语句
```
db.col.find({"by":"菜鸟教程"}).pretty() => where by = '菜鸟教程'
db.col.find({"likes":{$lt:50}}).pretty() => where likes < 50
可选参数
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$ne 不等于
```
### and 条件
每个where 以逗号隔开
```
>db.col.find({key1:value1, key2:value2}).pretty()
```
### OR 条件
需要用到 $or 关键字
```
db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
)
```
### AND 和 OR 联合使用
```
db.col.find({
"likes": {
$gt: 50
},
$or: [
{
"by": "菜鸟教程"
},
{
"title": "MongoDB 教程"
}
]
})
```
### $type 查询value 的指定类型
> [完整类型表 ](https://www.runoob.com/mongodb/mongodb-operators-type.html)
| **类型** | **数字** | **备注** |
| --- | --- | --- |
| Double | 1 | |
| String | 2 | |
| Object | 3 | |
| Array | 4 | |
...
测试数据
```
>db.col.insert({
title: 'PHP 教程',
})
>db.col.insert({
title:123456,
})
```
只查询title值为字符串的
```
db.col.find({"title" : {$type : 2}})
或
db.col.find({"title" : {$type : 'string'}})
```
### limit
`db.col.find({},{"title":1,_id:0}).limit(2)`
### Skip
`db.col.find({},{"title":1,_id:0}).limit(1).skip(1)`
> skip()方法默认参数为 0
### sort
`db.col.find({},{"title":1,_id:0}).sort({"likes":-1})`
> -1 倒叙, 1 顺序,skip(), limilt(),
> sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()
## createIndex 索引
语法
```
db.collection.createIndex(keys, options)
```
Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1
实例: ``` db.col.createIndex({"title":1,"description":-1}, {background: true}) ``` ``` 1、查看集合索引 db.col.getIndexes() 2、查看集合索引大小 db.col.totalIndexSize() 3、删除集合所有索引 db.col.dropIndexes() 4、删除集合指定索引 db.col.dropIndex("索引名称") ```
';
options 参数
| Parameter | Type | Description | | --- | --- | --- | | background | Boolean | 为true 不阻塞创建索引 默认值为**false**。 | | unique | Boolean | 唯一索引,默认值为**false**. | | name | string | 索引名,不指定自动生成 | | sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为**false**. | | expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 | | v | index version | 索引的版本号 | | weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 | | default\_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 | | language\_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |实例: ``` db.col.createIndex({"title":1,"description":-1}, {background: true}) ``` ``` 1、查看集合索引 db.col.getIndexes() 2、查看集合索引大小 db.col.totalIndexSize() 3、删除集合所有索引 db.col.dropIndexes() 4、删除集合指定索引 db.col.dropIndex("索引名称") ```