【数据库】——MongoDB常用语法

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 })
>

在这里插入图片描述

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

例:

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

在这里插入图片描述

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

例:

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

在这里插入图片描述


9.更新文档

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为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 }

在这里插入图片描述

  • 使用方法一,不过需要在其后增加一个参数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语句比较
在这里插入图片描述
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条件操作符有:

操作写法含义
大于$gtgreater than >
小于$ltless than <
大于等于$gtegt equal >=
小于等于$ltelt equal <=
等于$eqequal =
非等$nenot 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类型操作符

类型数字备注
Double1
String2
Object3
Array4
Binary data5
Undefined6已废弃。
Object id7
Boolean8
Date9
Null10
Regular Expression11
JavaScript13
Symbol14
JavaScript (with scope)15
32-bit integer16
Timestamp17
64-bit integer18
Min key255Query with -1.
Max key127

例:

> 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)})}
MongoDB语法是用于在MongoDB数据库中执行操作的语法规则。其中一些常见的语法包括: 1. 数据库链接:用于建立与MongoDB数据库的连接。可以使用MongoDB连接字符串或MongoDB连接对象来进行连接。 2. 条件操作符:用于比较和筛选集合中的数据。常见的条件操作符包括大于($gt)、小于($lt)、大于等于($gte)、小于等于($lte)、等于($eq)和非等于($ne)等。 3. 插入数据:使用insert()方法向集合中插入数据。可以使用语法格式如下:db.集合名.insert({字段名: 值})。 总结起来,MongoDB语法包括数据库链接、条件操作符和插入数据等基本操作。使用这些语法可以对MongoDB数据库进行增删改查等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MongoDB 语法大全](https://blog.csdn.net/weixin_38316697/article/details/126085968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【数据库】——MongoDB常用语法](https://blog.csdn.net/weixin_44697562/article/details/110122105)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非西昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值