MongoDB笔记
MongoDB
数据库(database)
集合(collection)
文档(document)
- 在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
基本指令
-
show dbs
-
show databases
- 显示当前的所有数据库
-
use 数据库名
- 进入到指定的数据库中
-
db
- db 表示的是当前所处的数据库
-
show cokllections
- 显示数据库中所有的集合
数据库的CRUD操作
insert
db.<collection>.insert(doc)
- 向数据库中插入一个或多个文档
- 如果插入时,没有给文档指定 _id 属性,则数据库会自动为文档添加作为文档的唯一标识。
query
db.<collection>.find()
- 查询集合中所有符合条件的文档
- find() 可以接受一个对象作为条件参数 {_id:"hello"}
- findOne() 查询符合条件的第一个
- 查询指定的字段,在 find({},{name:1,age:0}) 中添加参数,1:显示、0:不显示。
update
db.<collection>.update(查询条件,新对象)
-
默认情况下使用新对象来替换旧对象
-
如果需要修改指定的属性,而不是替换。需要使用 “修改操作符” 来完成修改
- $set 可以用来修改文档中的指定属性
- $unset 可以用来删除文档中的指定属性
-
update() 默认只会修改一个,是如下两个的综合
- 修改多个需要添加一个参数 multi:true
-
updateMany() 同时修改多个符合条件的值
-
updateOne() 只会修改一个
-
replaceOne() 替换一个文档
delete
db.<collection>.remove({条件对象})
- 可以根据条件来删除文档,传递条件的方式和find()一样
- 删除符合条件的所有文档,或者删除一个 如下图:第二个参数设置为 true
- 如果只传递一个空对象,则会删除所有集合,性能较差 db.
.drop() 删除集合
sort 排序
db.<collection>.find({}).sort({条件对象});
- sort() 可以用来指定文档的排序规则,需要传递一个对象参数 1:升序、 -1:降序。可以指定多个参数。
入门练习
# 1. 进入数据库
use test;
# 2. 向数据库的 users 集合中插入一个文档
db.users.insert({username:"孙悟空"});
# 3. 查询集合中的文档
db.users.find();
# 4. 再次插入
db.users.insert({username:"猪八戒"});
# 5. 统计集合中的文档数量
db.users.find().count();
# 6. 指定查询
db.users.find({username:"孙悟空"});
# 7. users 集合中的 username 为 孙悟空文档 添加一个 address 属性
db.users.update({username:"孙悟空"},{$set:{address:"花果山"}});
# 8. 使用 唐僧 替换 usernamer 为 猪八戒的文档
db.users.replaceOne({username:"唐僧"},{username:"猪八戒"});
# 9. 删除 username 为 孙悟空 的文档
db.users.update({username:"孙悟空"},{$unset:{address:"花果山"}});
# 10. 向 孙悟空 添加一个 hoppy:{cities:["beijing","shanghai","shenzhen"],movies:["sanguo","hero"]}
db.users.update({username:"孙悟空"},{$set:{hoppy:{cities:["beijing","shanghai","shenzhen"],movies:["sanguo","hero"]}}});
# 11. 向 唐僧 添加一个 hoppy:{movies:["sanguo","hero"]}
db.users.update({username:"唐僧"},{$set:{hoppy:{movies:["sanguo","hero"]}}});
# 12. 查询喜欢 hero 的文档(数组包含)
# MongoDB 支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过 . 的形式来匹配。
# 如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号 单双都支持
db.users.find({"hoppy.movies":"hero"});
# 13. 向 唐僧 中添加一个新电影 Interstellar(数组添加)
# $push 用于向数组中添加一个新的元素
db.users.update({username:"唐僧"},{$push:{"hoppy.movies":"Interstellar"}});
# $addToSet 向数组中添加一个新元素,如果数组中存在该元素 则不会添加
db.users.update({username:"唐僧"},{$addToSet:{"hoppy.movies":"Interstellar"}});
# 14. 删除喜欢 beijing 的用户
db.users.remove({"hoppy.cities":"beijing"});
# 15. 删除 users 集合
db.users.drop();
# 16. 向 numbers 中插入 20000 条数据
# 方法1(这个竟然能写for循环,真棒)
for(var i=1;i<=20000;i++){
db.numbers.insert({num:i});
}
# 方法2(既然能写for循环,那就可以写 js 代码,刷新了我对数据库的认知)
var arry=[];
for(var i=1;i<=20000;i++){
arr.push({num:i});
}
db.numbers.insert(arry);
# 查看总条数
db.numbers.find().count();
# 17. number 大于 500 ,具体的查询还需要看官方文档 如:图1
db.numbers.find({num:{$gt:500}});
# 18. 大于 40 小于 50
db.numbers.find({num:{$gt:40,$lt:50}});
# 19. 查询前 10 条数据
db.numbers.find().limit(10);
# 20. 查询第 11 - 20 条
db.numbers.find().skip(10).limit(10);
图1
文档之间的关系
- 一对多
- 一对一
- 多对多
因为 MongoDB 中存的是 json 所以我们可以理解为就是 嵌套类/嵌套json
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?