MongoDB操作
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB操作相关的知识,希望对你有一定的参考价值。
MongoDB操作(1)
以下均基于Windows下的MongoDB使用
补充一下上面那个黑马教程的完整版
文章目录
一.基本命令
1.启动/关闭
在前一篇安装MongoDB的博客已经讲过
2.查看所有数据库
show dbs
或show 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个字节是
简单的增量值
- 前4个字节为当前
关于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的一些命名设计规范
数据库和集合都禁止使用数字开头…
查了好几个教程,比如这个:
虽然
db["集合名字"]
没报错, 但我这里用
db["集合名字"].find()
还是报错
只有最后这个getCollection
没有报错:
但既然不合乎规范有很麻烦…那就把它删了吧!
删除这种带数字的我看的这个,用db.getCollection('1').drop()
现在只剩a了
2.单双引号
以上是关于MongoDB操作的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项