MongoDB笔记

MongoDB

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
    • image
  • updateMany() 同时修改多个符合条件的值

  • updateOne() 只会修改一个

  • replaceOne() 替换一个文档

delete

db.<collection>.remove({条件对象})
  • 可以根据条件来删除文档,传递条件的方式和find()一样
  • 删除符合条件的所有文档,或者删除一个 如下图:第二个参数设置为 true
  • image
  • 如果只传递一个空对象,则会删除所有集合,性能较差 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
image

文档之间的关系

  • 一对多
  • 一对一
  • 多对多

因为 MongoDB 中存的是 json 所以我们可以理解为就是 嵌套类/嵌套json
image

posted @ 2023-03-15 22:08  shenghuotaiai  阅读(21)  评论(0编辑  收藏  举报