MongoDB操作

Posted 临风而眠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB操作相关的知识,希望对你有一定的参考价值。

MongoDB操作(1)

​ 以下均基于Windows下的MongoDB使用

参考教程:B站黑马程序员教程w3school

​ 补充一下上面那个黑马教程的完整版

一.基本命令

1.启动/关闭

​ 在前一篇安装MongoDB的博客已经讲过

2.查看所有数据库

show dbsshow databases

3.切换数据库

use db_name(db_name是所需切换的数据库的名字)

4.查看当前数据库

db

5.删除当前数据库

db.dropDataBase()

6.创建数据库

​ 没有直接创建数据库的指令,直接 use new_db_name(new_db_name是所创建的数据库的名字)

​ 但是,在 MongoDB 中,数据库在获取内容(数据)之前不会真正创建!

​ show dbs 可以看出还没有test1这个数据库

在实际创建数据库(和集合)之前,MongoDB 会一直等待您创建至少有一个文档(记录)的集合(表)

​ 其实在MongoDB中没有mysql的表那个概念,而是把数据存到集合里面

​ MongoDB 中的集合与 SQL 数据库中的表相同

创建集合

不手动创建集合:

向不存在的集合中第一次加入数据时,集合会被创建出来

手动创建结合:

db.createCollection(name,options)
db.createCollection("stu")
db.createCollection("sub", { capped : true,size : 101]})

参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节

一般情况不设定上限

​ 在test1中没有集合时,show dbs的结果中没有test1,

​ test1中创建集合时,show dbs的结果中才会显示test1

查看集合:

show collections

删除集合:

db.集合名称.drop()

​ db就是当前数据库

二.数据类型

Object lD:文档ID

String:字符串,最常用,必须是有效的UTF-8

Boolean:存储一个布尔值,true或false

​ json中true和false首字母小写

Integer:整数可以是32位或64位,这取决于服务器
Double:存储浮点值
Arrays:数组或列表,多个值存储到一个键
Object:用于嵌入式的文档,即一个值为一个文档

​ 对象 字典中还有字典

Null:存储Null值
Timestamp:时间戳,表示从1970-1-1到现在的总秒数
Date:存储当前日期或时间的UNIX时间格式

  • 创建日期语句如下︰参数的格式为YYYY-MM-DD

    new Date(‘2021-8-7’)

    对应Python中的datatime类型

  • 每个文档都有一个属性,为,保证每个文档的唯一性

  • 可以自己去设置__id插入文档,如果没有提供,那么MongoDB为每个文档提供了一个独特的__id,类型为objectlD

  • objectID是一个12字节的十六进制数︰

    • 前4个字节为当前时间戳
    • 接下来3个字节的机器ID
    • 接下来的2个字节中MongoDB的服务进程id
    • 最后3个字节是简单的增量值

关于objectID:

先插入数据

​ 不手动创建集合:向不存在的集合中第一次加入数据时,集合会被创建出来,这时候直接插入数据,名称为a的集合就自动被创建了

db.a.find()

​ 此时可以看到,自动提供了一个_id

三.增删改查

1.插入

  • db.集合名称.insert(document)
  • db.stu.insert([name:'gj' ,gender:1})
  • db.stu.insert({_id:"20170101",name:'gj' ,gender:1})
  • 插入文档时,如果不指定_id参数, MongoDB会为文档分配一个唯一的Objectld

在python中插入的是字典,在终端中插入的其实是json,所以键值对的键不用打引号

​ 再在集合a中插入一条数据,此时就有两条数据了

2.保存

  • db.集合名称.save(document)
  • 如果文档的_id已经存在则修改,如果文档的_id不存在则添加

先插入一条数据:

修改一下age:

报错了,因为_id是唯一的

但是此时将insert命令改为save

这样子数据就更新了

_id相同的用insert就会报错,用save就可以更新

​ 总之

db.collecion.insert({})插入数据,_id存在就报错db.collection.save({})插入数据,_id存在会更新

3.更新

db.集合名称.update(<query> ,<update>,{multi: < boolean>})

​ db:当前数据库

参数query:查询条件

参数update:更新操作符
参数multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新
db.stu.update({name:'hr'},{name:'mnc'}) 更新一条
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条

db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部

注意:"multi update only works with $ operators"

​ multi必须和$操作符一起使用

更改一条

但是…age不见了,这样子只是替换了这条数据,没有保留不准备修改的数据

解决方法就是:

db.stu.update({name:'hr'},{$set:{name:'hys'}}) ,其中$set的作用就是把对应的键设置为对应的值

这时候age没有改变

更改多条

先插入几条数据玩一玩:

不加multi参数,还是只能改变一条

​ 注意set后面要加冒号

加上multi:

即:{multi:true}达到更新的目的

4.删除

db.集合名称.remove(<quary>,fjustOne: <boolean>})
参数query:可选,删除的文档的条件
参数justOne:可选,如果设为true或1,则只删除一条,默认false,表示删除多条

只删一条

使用justOne

删除多条

5.查询

​ find ,上面用过了

四.遇到的问题

1.数字开头的集合

不手动创建集合的时候,在集合中直接加入数据的方式来创建集合,这时候集合的名字不能以数字开头?

可我之前手动创建数据库db.createCollection("1"),可以是数字呀

难道要加个引号?

还是不行

然后直接查:MongoDB数字命名的集合,看到了MongoDB的一些命名设计规范

数据库和集合都禁止使用数字开头…

查了好几个教程,比如这个:

mongodb查询数字开头的集合报错

​ 虽然db["集合名字"]没报错,

​ 但我这里用db["集合名字"].find()还是报错

只有最后这个getCollection没有报错:

但既然不合乎规范有很麻烦…那就把它删了吧!

删除这种带数字的我看的这个,用db.getCollection('1').drop()

​ 现在只剩a了

2.单双引号

以上是关于MongoDB操作的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB PHP

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

VSCode 如何操作用户自定义代码片段(快捷键)