mongodb
This commit is contained in:
@ -1,5 +1,22 @@
|
||||
# MongoDB 基础
|
||||
|
||||
<nav>
|
||||
<a href="#一数据类型">一、数据类型</a><br/>
|
||||
<a href="#二新增数据">二、新增数据</a><br/>
|
||||
<a href="#三查询数据">三、查询数据</a><br/>
|
||||
<a href="#31-基本-API">3.1 基本 API</a><br/>
|
||||
<a href="#32-等值查询">3.2 等值查询</a><br/>
|
||||
<a href="#33-范围查询">3.3 范围查询</a><br/>
|
||||
<a href="#34-逻辑查询">3.4 逻辑查询</a><br/>
|
||||
<a href="#35-集合查询">3.5 集合查询</a><br/>
|
||||
<a href="#36-额外操作">3.6 额外操作</a><br/>
|
||||
<a href="#四修改数据">四、修改数据</a><br/>
|
||||
<a href="#41-基本-API">4.1 基本 API</a><br/>
|
||||
<a href="#42-常规修改器">4.2 常规修改器</a><br/>
|
||||
<a href="#43-数组修改器">4.3 数组修改器</a><br/>
|
||||
<a href="#五删除数据">五、删除数据</a><br/>
|
||||
</nav>
|
||||
|
||||
## 一、数据类型
|
||||
|
||||
### 1.1 BSON
|
||||
@ -56,7 +73,7 @@ db.collection.insertMany()
|
||||
|
||||
新增单条数据的示例如下。额外需要说明的是,在插入文档前,文档所属的集合不必预先创建,程序会自动创建:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.insertOne({
|
||||
name: "heibai",
|
||||
age: 26,
|
||||
@ -68,7 +85,7 @@ db.user.insertOne({
|
||||
|
||||
新增多条数据的示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.insertMany([
|
||||
{
|
||||
name: "hei",
|
||||
@ -109,7 +126,7 @@ db.collection.find(<query>, <projection>)
|
||||
+ `<query>`:用于指定查询条件,不加任何条件则默认查询集合中全部数据;
|
||||
+ `<projection>`:可选操作,用于自定查询的返回字段,1 表示该字段包含在返回结果中,0 表示不返回,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({},{name: 1, ObjectId:-1})}
|
||||
```
|
||||
|
||||
@ -123,19 +140,19 @@ db.user.find({name:"heibai"})
|
||||
|
||||
上面的语法实际上是 `$eq` 操作的简写形式,如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({name: {$eq: "heibai"}})
|
||||
```
|
||||
|
||||
所以如果你想要进行非等值查询,则可以使用 `$ne` 操作符,代表 not equal ,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({name: {$ne: "heibai"}})
|
||||
```
|
||||
|
||||
特别的,如果你想允许某个字段等于多个值,可以使用 `$in` 操作符,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({name: {$in:["heibai","ying"]} })
|
||||
```
|
||||
|
||||
@ -143,7 +160,7 @@ db.user.find({name: {$in:["heibai","ying"]} })
|
||||
|
||||
Mongodb 提供了比较操作符 `$lt`、`$lte`、`$gt` 和 `$gte` ,分别对应 <、 <=、 >和 >= ,主要用于范围查查询,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({age: {$gt: 20, $lt: 40}})
|
||||
```
|
||||
|
||||
@ -153,18 +170,18 @@ Mongodb 提供了逻辑操作符 `$or`、`$and`、`$not`、`$nor` ,用于处
|
||||
|
||||
查询姓名为 heibai 或者年龄大于 30 岁的所有用户,此时可以使用 $or 操作符:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find( { $or: [{ name: "heibai" }, { age: { $gt: 30 } }] })
|
||||
```
|
||||
查询所有姓名不是以 hei 开头的所有用户,此时可以使用 $not 操作符来配合正则表达式:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({name: {$not: /^hei*/}})
|
||||
```
|
||||
|
||||
如果文档中存在 name 字段,则它的值不能为 heibai,如果文档中存在 age 字段,则它的值不能大于 30 ,只有满足以上两个条件的文档才会被查询出来,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find( { $nor: [{ name: "heibai" }, { age: { $gt: 30 } }] })
|
||||
```
|
||||
|
||||
@ -174,22 +191,22 @@ $and 操作符的使用率比较低,因为此时更好的方式是把多个条
|
||||
|
||||
如果需要查询个人爱好中有 football 的所有用户,即只要集合 Hobby 中存在 football 即可,对应的查询方法如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({Hobby: "football"})
|
||||
```
|
||||
如果想要获取集合中指定位置等于指定值的文档,对应的查询方法如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({"Hobby.2": "football"})
|
||||
```
|
||||
如果想要约束集合必须包含多个指定值,此时可以使用 $all 操作符:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({Hobby:{ $all: ["football", "tennis"]}})
|
||||
```
|
||||
查询时如果只想返回集合的部分内容,则可以使用 $slice ,$slice 接收一个参数 n,正数表示获取集合的前 n 个参数,负数表示获取集合末尾的 n 个参数,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.find({name: "heibai"},{Hobby:{$slice: 2}})
|
||||
```
|
||||
|
||||
@ -220,7 +237,7 @@ db.collection.updateMany(<filter>, <update>, <options>)
|
||||
+ `<update>`:更改操作或新文档数据;
|
||||
+ ` <options>`:可选操作,常用的可选操作是 `upsert` ,当其为 true 时,代表如果按照过滤条件没有找到对应的文档,则将待更改的数据插入到集合中;当其为 false 时,如果没有找到数据,则不执行任何操作。示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.replaceOne(
|
||||
{ _id: ObjectId("5d3d00a4ad383d3becc7b03a")},
|
||||
{
|
||||
@ -242,7 +259,7 @@ db.user.replaceOne(
|
||||
|
||||
用于修改具体的字段,如果待修改的字段不存在,则会新增该字段。示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.updateOne(
|
||||
{ name: "danrenying"},
|
||||
{ $set: {age: 66} }
|
||||
@ -253,7 +270,7 @@ db.user.updateOne(
|
||||
|
||||
用于对指定字段的值进行增加或减少,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.updateOne(
|
||||
{ name: "danrenying"},
|
||||
{ $inc: {age: -10} }
|
||||
@ -268,7 +285,7 @@ db.user.updateOne(
|
||||
|
||||
用于往数组中新增数据,示例如下。使用 `$each` 可以一次添加多个元素:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.updateOne(
|
||||
{ name: "danrenying"},
|
||||
{ $push: {"Hobby": {$each: ["film","music"]}} }
|
||||
@ -279,7 +296,7 @@ db.user.updateOne(
|
||||
|
||||
该修改器可以把数组当做集 (set) 来使用,即只能添加当前数组中不存在的数据,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.updateOne(
|
||||
{ name: "danrenying"},
|
||||
{ $addToSet: {"Hobby": {$each: ["film","music"]}} }
|
||||
@ -290,7 +307,7 @@ db.user.updateOne(
|
||||
|
||||
该修改器可以从数组任意一端删除元素,`-1` 代表从数组头删除元素,`1` 代表从数组尾删除元素,示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.updateOne(
|
||||
{ name: "danrenying"},
|
||||
{ $pop: {"Hobby": -1} }
|
||||
@ -319,7 +336,7 @@ db.collection.deleteOne()
|
||||
|
||||
使用示例如下:
|
||||
|
||||
```json
|
||||
```shell
|
||||
db.user.deleteOne(
|
||||
{ name: "danrenying"}
|
||||
)
|
||||
|
Reference in New Issue
Block a user