MongoDB

  • 1.创建数据库
  • 2.查看当前所在数据库
  • 3.查看所有数据库
  • 4.删除数据库
  • 5.创建集合(表)
  • 6.查看所有集合(表)
  • 7.删除集合(表)
  • 8.插入文档
  • 9.更新文档
  • 10.删除文档
  • 11.查询文档
  • 1).模糊查询
  • 12.条件操作符
  • 13.$type类型操作符
  • 14.Limit与Skip方法
  • 15.sort()排序方法
  • 16.createIndex()创建索引
  • 循环生成数据




1.创建数据库

1).数据库存在就是切换;
2).数据库不存在则创建。
语法格式:
use + 数据库的名字

例:

> use FX
switched to db FX

2.查看当前所在数据库

语法格式:
db

例:

> db
test


3.查看所有数据库

刚创建的数据库里边没有数据的话是不会显示在数据库列表中的,随便添加一组数据即可显示。
语法格式:
show dbs

例:

> show dbs
FX      0.000GB
admin   0.000GB
config  0.000GB
local   0.000GB

4.删除数据库

删除当前的数据库,你可以切换到指定的数据库下再进行删除。最后可以用查看所有数据库来验证一下是否删除成功。

语法格式:
db.dropDatabase()

例:

> db.dropDatabase()
{ "dropped" : "FXXX", "ok" : 1 }

5.创建集合(表)

在已有的数据库内创建一个集合。

1).语法格式:
db.createCollection(“集合名字”)

例:

> db.createCollection("rubbbbb")
{ "ok" : 1 }

2).语法格式:
db.createCollection(name, options)
说明:

  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项
    options 可以是如下参数:

字段

类型

描述

capped

布尔

(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。

autoIndexId

布尔

3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。

size

数值

(可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。

max

数值

(可选)指定固定集合中包含文档的最大数量。

在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

下面是带有几个关键参数的 createCollection() 的用法:

创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。

例:

> db.createCollection("mycol", { capped : true, autoIndexId : true, size : 
   6142800, max : 10000 } )
{ "ok" : 1 }

3).语法格式:
db.集合名字.insert({name:‘张三’})

也可以直接加上集合名字并设置内容来创建。
1.已经存在集合则添加内容;
2.不存在集合则创建集合并且添加内容。

例:

> db.ABC.insert({name:'张三'})
WriteResult({ "nInserted" : 1 })


6.查看所有集合(表)

查看当前数据库的所有集合。

语法格式:
show tables或者show collections

例:

> show tables
fx
> show collections
fx


7.删除集合(表)

参数说明:

语法格式:
db.集合名字.drop()

返回值:
如果成功删除选定集合,则drop() 方法返回 true,否则返回 false。

例:
可以先查看已有的所有集合,删除了之后再次查看所有集合来验证是否成功。

> db.rubbbbb.drop()
true

8.插入文档

1).插入相同的内容会重复生成,但是_id不同。
语法格式:
db.集合名字.insert({name:‘张三’})
例:

> db
FX
> db.fx.insert({name:'fx'})
WriteResult({ "nInserted" : 1 })
> db.fx.insert({name:'fx'})
WriteResult({ "nInserted" : 1 })
>

mongodb Filters语法 mongodb语法详解_mongodb

2).向集合中插入一个新的文档。
语法格式:
db.集合名字.insertOne({name:‘zs’})

例:

> db.fx.insertOne({name:'zs'})
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5fbdeb5f1820a7cabe1bd4ab")
}

mongodb Filters语法 mongodb语法详解_数据_02

3).向集合中加入多个文档。
语法格式:
db.集合名字.insertMany([{name:‘ls’},{name:‘ww’}])

例:

> db.fx.insertMany([{name:'ls'},{name:'ww'}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5fbded201820a7cabe1bd4ac"),
                ObjectId("5fbded201820a7cabe1bd4ad")
        ]
}

mongodb Filters语法 mongodb语法详解_mongodb_03


9.更新文档

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如mongodb Filters语法 mongodb语法详解_操作符_04inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

1).更新一条数据。此处是将name属性的内容”fx“的第一条数据内容改为”jintianshigehaorizi“。
语法格式:
db.集合名字.update({‘name’:‘fx’},{$set:{‘name’:‘jintianshigehaorizi’}})
例:

> db.fx.update({'name':'fx'},{$set:{'name':'jintianshigehaorizi'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.fx.find().pretty()
{
        "_id" : ObjectId("5fbdc82ecaa05509cc59f4d8"),
        "name" : "jintianshigehaorizi"
}

2).更改多条数据:

  • 将所有name为”fx“的数据的属性都改为”jintianshigehaorizi“。

语法格式:
db.集合名字.updateMany({‘name’:‘fx’},{$set:{‘name’:‘jintianshigehaorizi’}})

例:

> db.fx.updateMany({'name':'fx'},{$set:{'name':'jintianshigehaorizi'}})
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }

mongodb Filters语法 mongodb语法详解_数据库_05

  • 使用方法一,不过需要在其后增加一个参数multi,此参数默认为false。
    语法格式:
    db.集合名字.update({‘name’:‘fx’},{$set:{‘name’:‘jintianshigehaorizi’}},{multi:true})

10.删除文档

用来删除集合中的数据。

  • 删除指定条件的文档。
    语法格式:
    db.集合名字.deleteOne({name:‘bbbbbb’})

例:

> db.fx.find()
{ "_id" : ObjectId("5fbe00b81820a7cabe1bd4af"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b0"), "name" : "bbbbbb" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b1"), "name" : "cccccccc" }
> db.fx.deleteOne({name:'bbbbbb'})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.fx.find()
{ "_id" : ObjectId("5fbe00b81820a7cabe1bd4af"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b1"), "name" : "cccccccc" }
>
  • 删除多个文档
    语法格式:
    db.集合名字.deleteMany({name:‘bbbbbb’})
    例:
> db.fx.deleteMany({name:'bbbbbb'})
{ "acknowledged" : true, "deletedCount" : 3 }
> db.fx.find()
{ "_id" : ObjectId("5fbe00b81820a7cabe1bd4af"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b1"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f51820a7cabe1bd4b3"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f71820a7cabe1bd4b5"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f81820a7cabe1bd4b7"), "name" : "cccccccc" }
  • 删除所有文档,如果文档中所有数据都没用了,那么直接删除集合更高效。

例:

> db.fx.remove({})
WriteResult({ "nRemoved" : 4 })
> db.fx.find()
>

11.查询文档

下列方法都可以显示当前集合内的所有文档数据。不同的是pretty()是以格式化的方式来显示且更易读。findOne()只返回一个文档。
语法格式:

  • db.集合名字.findOne()
  • db.集合名字.find()
  • db.集合名字.find().pretty()

例:

> db.fx.find().pretty()
{ "_id" : ObjectId("5fbdeb5f1820a7cabe1bd4ab"), "name" : "zs" }
{ "_id" : ObjectId("5fbded201820a7cabe1bd4ac"), "name" : "ls" }
{ "_id" : ObjectId("5fbded201820a7cabe1bd4ad"), "name" : "ww" }
{ "_id" : ObjectId("5fbdeeed1820a7cabe1bd4ae"), "name" : "aaaaaaaaa" }
> db.fx.find()
{ "_id" : ObjectId("5fbdeb5f1820a7cabe1bd4ab"), "name" : "zs" }
{ "_id" : ObjectId("5fbded201820a7cabe1bd4ac"), "name" : "ls" }
{ "_id" : ObjectId("5fbded201820a7cabe1bd4ad"), "name" : "ww" }
{ "_id" : ObjectId("5fbdeeed1820a7cabe1bd4ae"), "name" : "aaaaaaaaa" }

MongoDB与RDBMS Where语句比较

mongodb Filters语法 mongodb语法详解_数据库_06


MongDB AND条件

find().pretty()还可以传入多个键,每个键用逗号隔开。

>db.fx.find({key1:value1, key2:value2}).pretty()

MongDB OR条件
例:

> db.fx.find({$or:[{name:'cccccccc'},{name:'1234'}]}).pretty()
{ "_id" : ObjectId("5fbe00b81820a7cabe1bd4af"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b1"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f51820a7cabe1bd4b3"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f71820a7cabe1bd4b5"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f81820a7cabe1bd4b7"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe12061820a7cabe1bd4b8"), "name" : "1234" }

AND 和 OR 联合使用
例:

> db.fx.find({"name":{$gt:'155'},$or:[{"name":"cccccccc"},{"name":"188"}]}).pretty()
{ "_id" : ObjectId("5fbe00b81820a7cabe1bd4af"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b1"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f51820a7cabe1bd4b3"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f71820a7cabe1bd4b5"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f81820a7cabe1bd4b7"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe12061820a7cabe1bd4b8"), "name" : "188" }

1).模糊查询

1).包含xx字的文档:
例:

> db.fx.find({name:/x/})
{ "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"), "name" : "fxxxx", "age" : 88, "sex" : 1 }

2).以xx字开头的文档:
例:

> db.fx.find({name:/^f/})
{ "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"), "name" : "fxxxx", "age" : 88, "sex" : 1 }

3).以xx字结尾的文档
例:

> db.fx.find({name:/x$/})
{ "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"), "name" : "fxxxx", "age" : 88, "sex" : 1 }

12.条件操作符

用于比较两个表达式并从mongoDB集合中获取数据。
MongoDB条件操作符有:

操作

写法

含义

大于

$gt

greater than >

小于

$lt

less than <

大于等于

$gte

gt equal >=

小于等于

$lte

lt equal <=

等于

$eq

equal =

非等

$ne

not equal !=

我的数据库是FX,集合是fx,下列例子的意思是age大于10的显示出来。其余操作符用法一样。
例:

> db.fx.find().pretty()
{
        "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"),
        "name" : "fxxxx",
        "age" : 88,
        "sex" : 1
}
{
        "_id" : ObjectId("5fbe17811820a7cabe1bd4ba"),
        "name" : "zz",
        "age" : 8,
        "sex" : 1
}
>
> db.fx.find({age:{$gt:10}})
{ "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"), "name" : "fxxxx", "age" : 88, "sex" : 1 }

大于和小于结合使用
例:
age中大于1小于88的显示出来。

> db.fx.find({age:{$gt:1,$lt:88}})
{ "_id" : ObjectId("5fbe17811820a7cabe1bd4ba"), "name" : "zz", "age" : 8, "sex" : 1 }

13.$type类型操作符

类型

数字

备注

Double

1

String

2

Object

3

Array

4

Binary data

5

Undefined

6

已废弃。

Object id

7

Boolean

8

Date

9

Null

10

Regular Expression

11

JavaScript

13

Symbol

14

JavaScript (with scope)

15

32-bit integer

16

Timestamp

17

64-bit integer

18

Min key

255

Query with -1.

Max key

127

例:

> db.fx.find({name:{$type:2}})
> //或者
> db.fx.find({name:{$type:'string'}})

14.Limit与Skip方法

1).Limit()
接受一个数字参数,表示该参数从MongoDB中读取多少条数据。

a.直接使用
语法格式:
db.集合名字.find().limit(4)

例:
表示在所有的文档中只读取4条,从第一条开始。

> db.fx.find().limit(4)
{ "_id" : ObjectId("5fbe00b81820a7cabe1bd4af"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01071820a7cabe1bd4b1"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f51820a7cabe1bd4b3"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe01f71820a7cabe1bd4b5"), "name" : "cccccccc" }

b.限制显示的数量以及内容
语法格式:
db.集合名字.find({},{age:1,_id:0}).limit(7)
例:
表示指定显示的信息以及读取的条数。因为我指定了只显示age这个内容,后边的1表示显示、0表示不显示,总共显示7条信息。我当前只有第七条有age这个内容,所以前面6条都是空的。

> db.fx.find({},{age:1,_id:0}).limit(7)
{  }
{  }
{  }
{  }
{  }
{  }
{ "age" : 88 }

2).Skip()
接受一个数字参数,表示跳过n条,从第n+1条开始显示。
a.单独使用
语法格式:
db.集合名字.find().skip(4)
例:
这里跳过了前4条,从第5条开始输出数据。

> db.fx.find().skip(4)
{ "_id" : ObjectId("5fbe01f81820a7cabe1bd4b7"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe12061820a7cabe1bd4b8"), "name" : "188" }
{ "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"), "name" : "fxxxx", "age" : 88, "sex" : 1 }
{ "_id" : ObjectId("5fbe17811820a7cabe1bd4ba"), "name" : "zz", "age" : 8, "sex" : 1 }

b.还可以和limit()方法组合使用
语法格式:
db.集合名字.find().skip(4).limit(4)
例:
跳过了前4条,从第5条开始总共显示4条数据,也就是第5、6、7、8条数据会显示。

> db.fx.find().skip(4).limit(4)
{ "_id" : ObjectId("5fbe01f81820a7cabe1bd4b7"), "name" : "cccccccc" }
{ "_id" : ObjectId("5fbe12061820a7cabe1bd4b8"), "name" : "188" }
{ "_id" : ObjectId("5fbe17711820a7cabe1bd4b9"), "name" : "fxxxx", "age" : 88, "sex" : 1 }
{ "_id" : ObjectId("5fbe17811820a7cabe1bd4ba"), "name" : "zz", "age" : 8, "sex" : 1 }

补充说明:

  • skip和limit方法只适合小数据量分页,如果是百万级效率就会非常低,因为skip方法是一条条数据书过去的,建议使用where_limit
  • 或者:db.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10)
  • 此处的skip、limit和sort三者的执行顺序和位置无关,但是在具有管道流的特质的地方是按顺序执行。

15.sort()排序方法

指定属性进行排序,1为升序,-1为降序。

语法格式:

  • 升序 db.集合名字.find({},{_id:0}).sort({name:1})
  • 降序 db.集合名字.find({},{_id:0}).sort({name:-1})
    例:
    此处不显示id因为设置为0,将name数据按升序进行排列。
> db.fx.find({},{_id:0}).sort({name:1})
{ "name" : 15 }
{ "name" : 15 }
{ "name" : 55 }
{ "name" : 55 }
{ "name" : 32165 }
{ "name" : 65429 }
{ "name" : 352198 }
{ "name" : "188" }
{ "name" : "fxxxx", "age" : 88, "sex" : 1 }
{ "name" : "zz", "age" : 8, "sex" : 1 }

补充说明:

skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

16.createIndex()创建索引

索引能够极大的提高查询的效率,存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或者多列的值进行排序的一种结构。

MongoDB索引——菜鸟教程

循环生成数据

语法格式:
for(i=0;i<10000;i++){db.集合名.insert({“i”:i})}
例1:

循环生成了10000条数据,内容是i:i++

> for(i=0;i<10000;i++){db.a.insert({"i":i})}
WriteResult({ "nInserted" : 1 })

例2:
循环生成一百万个数据,并且其中的age属性随机

> for(i=0;i<1000000;i++){db.a.insert({"i":i,'name':'fx'+i,'age':Math.floor(Math.random()*120)})}