MongoDB的安装以及基本使用

目录

参考资料:

官网说明:

系统指令

增加 

 查询

 修改

删除

数据关联关系(存储和查询)

 排序和投影


参考资料:

个人学习笔记和视频资料

入门参考视频

入门视频的参考博客 

深入学习视频 

 官网(你要的参考资料这里都有,只不过是英文版)

 mongodb创建用户


官网说明:

  • 由于官网是全英文的又比较复杂,这里说一下常用的几个板块
  • ①,mongodb服务器下载安装页面:product → community server

  • ②, mongodb 操作指令语法界面:Resources→Server→reference→mongosh Methods


常用语句:

  • 系统指令

  1.  CMD下登录mongo
# 无账户密码情况下
mongo

# 有账户密码情况下
mongo -u root -p root
  1. 显示所有数据库
show dbs/show databases

  2.  进入数据库 

use 数据库名

 3. 查询当前所在数据库

db

4.  查询当前数据库所有的集合

show collections;

  • 增加 

1.  向当前数据库的集合中插入一个或多个文档(文档指的不是文件,而是一个json数据):

db.集合名称.insert(文档)
db.集合名称.insert([文档1],[文档2],[文档3])

2.  如要向stus集合中插入一个json结构:{name:"张三",age:18,gender:""}

db.stus.insert({name:"张三",age:18,gender:"男"})

 3.  如要向stus集合中插入多个json结构:

db.stus.insert([{name:"tom",age:16,tel:"15555912161"},{name:"lady",age:17,tel:"15555912162"},{name:"jekins",age:18,tel:"15555912163"}]);

 4. 注意,当我们插入数据时,如果不指定_id,mongoDB会为我们提供默认的ObjectId作为属性_id的值,当我们提供了_id,mongoDB将不会再自动生成。_id作为mongoDb文档的唯一标识,不会也不能重复;

  •  查询

1. 查询操作的语法是

db.集合名称.find()                    查询集合中所有的文档,返回数组
db.集合名称.find({属性1:val1,属性2:val2,……,属性n:valn})    查询集合中符合条件的文档,返回数组
db.集合名称.find()[n]                  获取返回数组中的第N个元素
db.集合名称.find({属性1:val1,属性2:val2,……,属性n:valn})[N]    获取返回数据中的第N个元素
db.集合名称.findOne()                 查询默认排序的第一个元素
db.集合名称.findOne({属性1:val1,属性2:val2,……,属性n:valn })  查询符合条件默认排序的第一个元素
db.集合名称.findOne().name            查询默认排序的第一个元素的name属性值
db.集合名称.findOne({属性1:val1,属性2:val2,……,属性n:valn }).name    查询符合条件默认排序的第一个元素name属性值
db.集合名称.find().count()                                    查询集合中文档的数量
db.集合名称.find({属性1:val1,属性2:val2,……,属性n:valn}).count()   查询符合条件的文档的数量

2.  例子①

db.stus.find();
db.stus.find({name:"张三"});

3.  例子②:

db.stus.find()[0];
db.stus.find({name:"张三"})[0];

 4. 例子③:

db.stus.findOne();
db.stus.findOne({name:"张三"});

 5.  例子④:

db.stus.findOne().age;
db.stus.findOne({name:"张三"}).age;

 6. 例子⑤

db.stus.find().count();
db.stus.find({name:"张三"}).count();

  •  修改

1.  Update的基本语法是

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>, // Added in MongoDB 4.2
     let: <document> // Added in MongoDB 5.0
   }
)

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)

 2.  相关参数说明

范围类型描述
query文档使用查询运算符指定条件。和find()方法,一样的查询条件
update文档或聚合函数
  1. 如果是文档类型的话,那么就是将查询到的集合进行替换
  2. 如果是聚合函数的话,那么就是对查询到的集合进行聚合操作,常见的聚合函数有:
  1. $addFields或别名$set
  2. $project或别名$unset
  3. $replaceRoot
  4. $replaceWith
upsert布尔值可选的。如果设置为true,则在没有文档符合查询条件时会创建一个新文档。默认值为 false,在找不到匹配项时,不插入文档
multi布尔值可选。如果设置为true,则更新满足query条件的多个文档。如果设置为false,则更新一个文档。默认值为false
writeConcern文档可选, MongoDB写入安全机制,如果在事务中运行,请不要为操作明确设置writeConcern
collation文档可选, 允许用户为字符串比较指定特定于语言的规则,例如字母大写和重音符号的规则
arrayFilters文档数组可选。过滤文档数组,在更新数组字段时,用于确定要进行更新的数组元素

 3. 一般情况下,可选内容是用不到的,常用的语句如下

// ①  替换   将name 是lady的数据  替换为  文档{age:100}
db.stus.update({name:"lady"},{age:100});
//②  修改   将符合声明id的文档的name,age属性 替换为ladygaga和61 
db.stus.update({_id:ObjectId("6342ddd1a100194fa7b949cf")},{$set:{name:"ladygaga",age:61}})
//③  删除文档的属性  将符合声明id的文档的adress属性删除
db.stus.update({_id:"123456789"},{$unset:{adress:"ss"}});
//④  同时修改多个符合条件的文档
db.stus.updateMany()
//⑤  只修改符合条件的一个文档
db.stus.updateOne()
//⑥  替换 一个
db.stus.replaceOne()
//update  默认修改查询到的第一个  如果要修改多个  就需要更改参数
//⑦   同时修改多个  并且 不存在就插入
db.stus.update({name:"张三"},{$set:{age:65}},{multi:true,upsert:true});

 然后执行语句的结果如下:

 4.  一些注意事项

1). update 默认只修改查找到的第一个文档,如果想修改查询到的所有文档,可以添加参数multi,或者使用updateMany

2). $set 用于替换查找到文档的指定属性   $unset用于删除查找到文档的指定属性

  • 删除

1. 删除操作的基本语法及用法如下

① 删除集合中  符合条件的所有文档
db.集合名.remove({属性1:val1,属性2:val2,……,属性n:valn});
db.集合名.removeMany({属性1:val1,属性2:val2,……,属性n:valn});
②删除集合中  符合条件的 第一个文档
db.集合名.remove({属性1:val1,属性2:val2,……,属性n:valn},true);
db.集合名.removeOne({属性1:val1,属性2:val2,……,属性n:valn});
③ 删除集合
db.集合名.drop();
④删除数据库
db. dropDatabase();
//  删除  
// 默认情况下 删除符合条件的所有文档   如果只删除一个 那么需要在后面加参数true
db.stus.remove({_id:ObjectId("6342ddd1a100194fa7b949cf")});
db.stus.remove({"age":18},true);
//便捷的方法//只删一个
db.stus.removeOne({"name":"张三","age":18});
//删除多个
db.stus.removeMany({"name":"张三","age":18});
//删除所有
db.stus.remove({});
//删除集合
db.stus.drop();
//删除数据库
db.dropDatabase();
  • 数据关联关系(存储和查询)

1. 数据关联关系 一半分为三种:一对一,一对多和多对多,但是记录方式  大致有以下两种记录方式

1). 当关联的信息比较简单时,直接将关联的信息记录在关联信息中即可,如

小明和小红,他们分别有两个一对多的关系,都对应不同的老师和课程

db.students.insert(
	[{
		"name": "小明",
		"age": 12,
		"teachers": ["孔子", "孟子", "老子"],
		"classes": {
			"数学": "五年级上册",
			"语文": "四年级下册",
			"英语": "三年级上册"
		}
	}, {
		"name": "小红",
		"age": 18,
		"teachers": ["孙武", "孙膑", "司马迁"],
		"classes": {
			"三十六计": "第五卷",
			"战国策": "第三章",
			"国学": "周易"
		}
	}]);

注意在mongoDB中,大括号中填写的是键值对,中括号中填写的是数组

 这样,对于简单的对应关系,就可以使用直接填写的形式来说明

2). 当关联的信息比较复杂 ,或者扩展性比较强时,可以使用id的形式进行关联,如将上面的信息改为

将关联项进行入库

db. students.insert([{
	"name": "孔子",
	"age": 58,
	"address": "山东曲阜",
	"tel": "123456780"
}, {
	"name": "孟子",
	"age": 30,
	"address": "西藏",
	"tel": "123456781"
}, {
	"name": "老子",
	"age": 48,
	"address": "武当山",
	"tel": "123456782"
}, {
	"name": "孙武",
	"age": 56,
	"address": "新疆",
	"tel": "123456783"
}, {
	"name": "孙膑",
	"age": 89,
	"address": "云南",
	"tel": "123456784"
}, {
	"name": "司马迁",
	"age": 12,
	"address": "海南",
	"tel": "123456785"
}]);
db. students.insert([{
	"科目名称": "数学",
	"章节": "五年级上册"
}, {
	"科目名称": "语文",
	"章节": "四年级下册"
}, {
	"科目名称": "英语",
	"章节": "三年级上册"
}, {
	"科目名称": "三十六计",
	"章节": "第五卷"
}, {
	"科目名称": "战国策",
	"章节": "第三章"
}, {
	"科目名称": "国学",
	"章节": "周易"
}]);

 然后将关联信息  改为  关联 id

db.students.insert(
	[{
		"name": "小明",
		"age": 12,
		"teachers": [
			ObjectId("634a9c5d2b5f8a2e8804b1d4"),
			ObjectId("634a9c5d2b5f8a2e8804b1d5"),
			ObjectId("634a9c5d2b5f8a2e8804b1d6")
		],
		"classes": [
			ObjectId("634aa0cad75d54d882d87bc2"),
			ObjectId("634aa0cad75d54d882d87bc3"),
			ObjectId("634aa0cad75d54d882d87bc4")
		]
	}, {
		"name": "小红",
		"age": 18,
		"teachers": [
			ObjectId("634a9c5d2b5f8a2e8804b1d7"),
			ObjectId("634a9c5d2b5f8a2e8804b1d8"),
			ObjectId("634a9c5d2b5f8a2e8804b1d9")
		],
		"classes": [
			ObjectId("634aa0cad75d54d882d87bc5"),
			ObjectId("634aa0cad75d54d882d87bc6"),
			ObjectId("634aa0cad75d54d882d87bc7")
		]
	}]);

 3). 关联查询

 假如查询小红第一个老师的信息,应该这样查(mongodb支持简单的变量定义)

//创建变量 teacs
var teacs = db.students.findOne({
	"name": "小红"
}).teachers;
//输出数组的第一个元素
teacs[0];
//然后条件查询  
db.students.findOne({
	"name": teacs[0]
})._id;

  •  排序和投影

1). Mongodb的排序默认是按照id进行升序排序的,而id是由时间戳生成的,所以mongodb默认是按照时间进行升序排序的

2). Mongodb提供sort函数来来支持自定义排序,其中1表示升序,-1表示降序,示例如下:

如在students表中,按照age进行升序,name进行降序排列

db.students.find().sort({
	"age": 1,
	"name": -1
});

3). 当我们查询数据时,尤其是当文档属性特别多的时候,就需要有选择地进行显示,否则影响阅读,find后有个参数就为我们提供了相应的功能,其中1表示显示,0表示隐藏,_id列默认是显示的

如:我们在students表中只显示name和age属性,其他的都隐藏

db.students.find({},{"name":1,"age":1});

可见,_id列如果不隐藏,默认是显示的,所以需要主动隐藏_id

db.students.find({},{"name":1,"age":1,_id:0});

  •  MongoDB的特别之处

1. 同其他数据库不同的是,mongoDB可以在原先不存在的数据库中,不存在的集合中插入文档,当文档创建时,它所属的数据库以及集合都会自动创建

2. 如查询当前所有数据库

 3. 进入一个不存在的数据库,查询当前数据库,查询当前数据库的集合,并查询数据库列表

4.  在这个虚构的数据库下,虚构的集合中,创建一个文档(json结构),并查询数据库列表,以及本数据库的集合列表

 5. 可以看到,原先不存在的数据库和集合,在被塞入文档后,就被自动创建了,当然也可以手动去创建好数据库和集合,然后往里面塞文档

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

PH = 7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值