MongoDB分布式文件存储数据库

桃扇骨 2024-03-25 21:39 184阅读 0赞

一、MongoDB

尚硅谷

MongoDB学习视频:尚硅谷学习视频

  1. 尚硅谷:
  2. http://www.atguigu.com/
  3. MongoDB学习视频(尚硅谷):
  4. https://www.bilibili.com/video/BV15k4y1m7BF?p=1
  5. gitee笔记项目:
  6. https://gitee.com/happy_sad/mongoddb
  7. MongoDB
  8. https://www.mongodb.com/docs/
  9. Mongoose ODM v6.3.1
  10. https://mongoosejs.com/
  11. Mongoose v6.3.1: Schemas
  12. https://mongoosejs.com/docs/guide.html

一、安装下载

一、安装下载

下载地址:https://www.mongodb.com/try/download/community

1650781389055

二、配置环境变量

1、安装目录:D:\Mongodb

1650781584499

2、配置环境变量

path里配置(D:\Mongodb\mongodb-win32-x86_64-windows-5.0.7\bin)

1650781490050

3、配置data

在bin同目录下新建data文件夹,再在data目录下新建db和log文件夹

1650781564473

三、启动与测试

1、启动mongod服务(服务端),打开cmd,输入
  1. 默认端口(27017
  2. mongod --dbpath D:\Mongodb\mongodb-win32-x86_64-windows-5.0.7\data\db
  3. 变换端口(10086
  4. mongod --dbpath D:\Mongodb\mongodb-win32-x86_64-windows-5.0.7\data\db --port 10086

1650784658831

2、启动mongo(客户端),连接数据库
  1. mongo

1650784754648

3、默认端口为http://localhost:27017

1650781973317

4、打开cmd,输入
  1. mongod -version

1650784517612

四、配置mongod.cfg

  1. systemLog:
  2. destination: file
  3. path: D:\Mongodb\mongodb-win32-x86_64-windows-5.0.7\data\log\mongod.log
  4. storage:
  5. dbPath: D:\Mongodb\mongodb-win32-x86_64-windows-5.0.7\data\db
  6. net:
  7. port: 27017

1650788537522

1650790315717

五、管理员执行cmd

1、使用管理员权限执行
  1. mongod --config "D:\Mongodb\mongodb-win32-x86_64-windows-5.0.7\mongod.cfg" --install --serviceName "MongoDB"

1650789883773

2、 cmd输入“services.msc “
  1. services.msc

1650790172369

3、测试直接cmd输入”mongo“
  1. mongo

1650790237265

4、测试直接cmd输入”mongo“,然后输入”show dbs”
  1. mongo
  2. show dbs #展示数据库
  3. show databases

1650790507359

二、Mongodb的基本使用

  1. #启动服务
  2. mongo
  3. #显示当前所有的数据库
  4. show dbs
  5. show databases
  6. #进入指定的数据库
  7. use 数据库名
  8. #db表示的是当前所处的数据库
  9. db
  10. #显示数据库中所有的集合
  11. show collections

1650791749130

三、图形化安装界面

一、mongodbmanagerfree

1、下载的百度云连接
  1. 链接:https://pan.baidu.com/s/1As_Sxh0UpVzili_8dLCduQ
  2. 提取码:dx73

选择安装的路劲:D:\Mongodb\NoSQL Manager for MongoDB

1650856382078

2、二、图形化界面
  1. localhost

1650855947262

二、MongoDBCompass

1、官网下载链接

官网链接:https://www.mongodb.com/try/download/compass

1650866138294

2、图形化界面

1650866190940

1650866250292

三、Navicat Premium 12

可视化界面

1650867054256

四、Mongodb的CRUD

==CRUD官方文档:==https://www.mongodb.com/docs/manual/crud/\#std-label-crud

一、新增文档

官方文档:https://www.mongodb.com/docs/manual/tutorial/insert-documents/

1、insert
  1. /*
  2. 向数据库插入文档
  3. db.<collection>.insert()
  4. - 向集合中插入一个或多个文档
  5. - 当我们向集合中插入文档时,如果没有给文档指定_id属性时,则数据库会自动为文档添加_id
  6. 该属性作为文档的唯一标识(根据时间戳生成)
  7. - _id可以自己指定,如果自己指定了数据库就不会再添加了,如果自己指定了_id就需要确保它的唯一性
  8. db.collection.insertOne()
  9. - 插入一个文档对象
  10. db.collection.insertMany()
  11. - 插入多个文档对象
  12. */
  13. db.stus.insert({name:"猪八戒",age:28,gender:"男"});
  14. db.stus.insert({_id:"hello",name:"猪八戒",age:28,gender:"男"});
  15. db.stus.insert([
  16. {name:"沙和尚",age:29,gender:"男"},
  17. {name:"唐三藏",age:30,gender:"男"},
  18. {name:"小白龙",age:20,gender:"男"},
  19. ]);
  20. /*
  21. 向数据库插入文档
  22. db.<collection>.find()
  23. -查询集合中的信息
  24. */
  25. db.stus.find();
  26. //生成随机id(唯一标识)
  27. ObjectId()
2、$push
  1. #$push:用于向数组中添加一个新的元素
  2. db.user.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}})
3、 $addToSet
  1. #$addToSet:向数组中添加一个新元素(类似于向set集合中添加,如果数组中已经存在了该元素,则添加失败,因为不可重复)
  2. db.user.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}})

1650869114137

  1. # MongoDB 提供以下方法将文档插入到集合中:
  2. db.collection.insertOne() 将单个文档插入到收藏。
  3. db.collection.insertMany() 将多个文档插入到集合中。
  4. # 插入的其他方法
  5. db.collection.updateOne()与upsert: true选项一起使用时。
  6. db.collection.updateMany()与upsert: true选项一起使用时。
  7. db.collection.findAndModify()与upsert: true选项一起使用时。
  8. db.collection.findOneAndUpdate()与 upsert: true选项一起使用时。
  9. db.collection.findOneAndReplace()与 upsert: true选项一起使用时。
  10. db.collection.bulkWrite().

二、查询文档

官方文档:

查询文件:https://www.mongodb.com/docs/manual/tutorial/query-documents/

查询嵌入/嵌套文档:https://www.mongodb.com/docs/manual/tutorial/query-embedded-documents/

查询数组:https://www.mongodb.com/docs/manual/tutorial/query-arrays/

查询潜入文档数组:https://www.mongodb.com/docs/manual/tutorial/query-array-of-documents/

  1. /*
  2. 查询
  3. db.collection.find();
  4. - find()用来查询集合中所有符合条件的文档
  5. - find()可以接受一个对象作为条件参数
  6. {} 表示查询集合中所有的文档
  7. {属性 : 值} 查询属性是指定的文档
  8. - find()返回的是一个数组
  9. db.collection.findOne();
  10. - 用来查询集合中符合条件的第一个文档
  11. - findOne()返回的是一个对象
  12. db.collection.find({}).count();
  13. - 查询所有结果的数量
  14. */
  15. db.stus.find();
  16. db.stus.find({});
  17. db.stus.find({_id:"hello"});
  18. db.stus.find({name:"小白龙",age:20});
  19. db.stus.find({age:28});
  20. db.stus.findOne({age:28});
  21. db.stus.findOne({age:28}).name;
  22. db.stus.find({}).count();
  23. db.stus.find({}).length();

1650870266867

三、更新文档

官方文档:https://www.mongodb.com/docs/manual/tutorial/update-documents/

  1. /*
  2. 修改
  3. db.collection.update(查询条件,新对象);
  4. - updata()默认情况下会使用新对象来替换旧对象
  5. - 如果需要修改指定的属性,而不是替换,需要使用“修改操作符”来完成修改
  6. $set 可以用来修改文档中的指定属性
  7. $unset 可以用来删除文档的指定属性
  8. - update()默认情况下只会修改一个
  9. db.collection.updateOne();
  10. - 修改一个符合条件的文档
  11. db.collection.updateMany();
  12. - 同时修改多个文档
  13. db.collection.replaceOne();
  14. - 替换一个文档
  15. 注:1、MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是文档时,我们称这个文档为内嵌文档
  16. 2、MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档可以则可以通过==.的形式来匹配,且属性名必 须使用引号==,双引号单引号都可以
  17. */
  18. db.stus.find();
  19. //替换
  20. db.stus.update({name:"沙和尚"},{age:3});
  21. //修改
  22. db.stus.update(
  23. {"_id":ObjectId("62663e77861700005f000903")},
  24. {
  25. $set:{name:"沙和尚",gender:"male",address:"流沙河"}
  26. }
  27. )
  28. //删除
  29. db.stus.update(
  30. {"_id":ObjectId("62663e77861700005f000903")},
  31. {
  32. $unset:{address:"流沙河"}
  33. }
  34. )
  35. //update()默认情况下只改第一个
  36. db.stus.update(
  37. {"name":"猪八戒"},
  38. {
  39. $set:{address:"高老庄"}
  40. }
  41. )
  42. //updateMany()修改多个
  43. db.stus.updateMany(
  44. {"name":"猪八戒"},
  45. {
  46. $set:{address:"猪老庄"}
  47. }
  48. )

1650873331814

四、删除文档

官方文档:https://www.mongodb.com/docs/manual/tutorial/remove-documents/

  1. /*
  2. 删除
  3. db.collection.remove();
  4. - remove()可以根据条件来删除文档,传递的条件的方式和find()一样
  5. - 删除符合条件的所有文档(默认情况下会删除多个)
  6. - 如果remove()第二个参数传递一个true,则只会删除一个
  7. - 如果只传递一个空对象,则会删除集合中的所有文档
  8. db.collection.deleteOne();
  9. db.collection.deleteMany();
  10. db.collection.drop();
  11. - 删除集合(如果数据库里只有一个集合,会把数据库也一并删除)
  12. db.dropDatabase();
  13. - 删除数据库
  14. */
  15. db.stus.find();
  16. db.stus.remove({_id:"hello"});
  17. db.stus.remove({age:28});
  18. db.stus.remove({age:28},true);
  19. //清空集合(性能略差)
  20. db.stus.remove({});
  21. //直接清空集合
  22. db.stus.drop();
  23. //查看集合
  24. show collections;
  25. //删除数据库
  26. db.dropDatabase();

1650877047323

五、练习

  1. #添加两万条数据的性能高,尽量少调用系统的方法
  2. var arr=[];
  3. for(var i=1;i<=20000;i++){
  4. arr.push({num:i});
  5. }
  6. db.user.insert(arr);
  7. #查询user中num大于5000的文档
  8. db.user.find({num:{$gt:500}})
  9. #查询user中num小于30的文档
  10. db.user.find({num:{$lt:500}})
  11. #查询user中num大于40小于50的文档
  12. db.user.find({num:{$gt:40,$lt:50}})
  13. #查询user前10条的数据
  14. db.user.find({num:{$lte:10}})
  15. #limit()设置显示数据的上限
  16. db.user.find().limit(10)
  17. #查询user中第11条到20条的数据
  18. #skip()用于跳过指定数量的数据 skip( (页码-1)*每页显示的条数 ).limit(每页显示的条数)
  19. #MongoDB会自动调整limit()和skip()的位置
  20. db.user.find().skip(10).limit(10)
  21. db.user.find().limit(10).skip(10)

五、文档间的关系

  1. /*
  2. 文档之间的关系
  3. 一对一(one to one)
  4. - 夫妻(一个丈夫 对应 一个妻子)
  5. - 在MongoDB,可以通过内嵌文档来体现出一对一的关系
  6. 一对多(one to many)/多对一(many to one)
  7. - 父母 - 孩子
  8. - 用户 - 订单
  9. - 文章 - 评论
  10. - 也可以通过内嵌文档来映射一对多
  11. 多对多(many to many)
  12. - 分类 - 商品
  13. - 老师 - 学生
  14. - 也可以通过内嵌文档来映射一对多
  15. */

1、 一对一(one to one)

  1. 夫妻
  2. #在MongoDB中,可以通过内嵌文档的形式来体现出一对一的关系
  3. db.WifeAndHusband.insert([
  4. {
  5. wife:"黄蓉",
  6. husband:{
  7. name:"郭靖"
  8. }
  9. }, {
  10. wife:"潘金莲",
  11. husband:{
  12. name:"武大郎"
  13. }
  14. }
  15. ])

2、 一对多(one to many)/ 多对一(many to one)

  1. #一对多:父母和孩子、用户和订单、文章和评论,也可以通过内嵌文档的方式来映射一对多的关系(将1的那个属性设置为多的里面的字段)
  2. db.order.insert({
  3. list:["watermelor"],
  4. user_id:ObjectId("5f87b1deda684b252c2fc7a5")
  5. })
  6. var user_id = db.users.findOne({username:"swk"})._id
  7. //查询孙悟空的订单
  8. db.order.find({user_id:user_id})

3、 多对多(many to many)

  1. db.teacher.insert([
  2. {name:"洪七公"},
  3. {name:"黄药师"},
  4. {name:"龟仙人"}
  5. ])
  6. db.stus.insert([
  7. {
  8. name:"郭靖",
  9. tech_ids:[
  10. ObjectId("5f87b4b6da684b252c2fc7a8"),
  11. ObjectId("5f87b4b6da684b252c2fc7a9")
  12. ]
  13. },
  14. {
  15. name:"孙悟空",
  16. tech_ids:[
  17. ObjectId("5f87b4b6da684b252c2fc7a8"),
  18. ObjectId("5f87b4b6da684b252c2fc7a9"),
  19. ObjectId("5f87b4b6da684b252c2fc7aa")
  20. ]
  21. }
  22. ])

4、练习

  1. #查询工资小于1000或者大于2000的员工($or:[{}])
  2. db.emp.find( $or:[ {sal:{$lt:1000}},{sal:{$gt:2500}} ])
  3. db.emp.find();
  4. #为所有工资小于1000的增加400($inc:{})
  5. db.emp.updateMany({sal:{$lte:1000}},{$inc:{$sal:400}});
  6. db.emp.find();

六、sort和投影

  1. # find()查询文档时,默认情况是按照_id的值进行升序排列
  2. # sort()可以用来指定文档的排序的规则,需要传递一个属性来指定排序规则,1表示升序,-1表示降序
  3. db.users.find({}).sort({sal:1})
  4. db.users.find({}).sort({sal:1,empno:-1}) //先指定sale的升序 再empno的降序
  5. # limit、skip、sort可以任意顺序的调用
  6. # 查询时,我们可以在第二个参数的位置来设置查询结果的投影,1表示显示,0表示不显示
  7. db.users.find({},{ename:1,_id:0,sal:1})

七、Mongoose

一、 什么是mongoose

  1. 1、一般我们不会直接用MongoDB的函数来操作MongoDB数据库
  2. 2、而Mongose就是一套操作MongoDB数据库的接口。
  3. 3、简而言之就是:mongoose也可以操作mongodb数据库,而且它来操作数据库会有更多好处

二、 mongoose的优点有哪些

  1. 1、可以为mongodb的文档创建一个模式结构(Schema),说白了就是一个**约束的条件**
  2. 2、比原生的Node相比更容易操作mongodb数据库,也就是**更方便**
  3. 3、可以使用中间件和其他的应用业务挂钩,可以和其他的应用**结合使用**
  4. 4、数据可以通过类型转换转换成对象模型,也就是有方法可以使用。

三、 Mongoose的三个新对象

  1. # Schema(模式对象)
  2. 定义了约束mongodb的文档结构的条件
  3. # Model
  4. 相当于mongodb中的 collection(集合)
  5. # Document
  6. document表示集合中的具体文档
  7. # 注:值得注意的是这三个都是对象,是对象的话则有它们对应的方法和属性。

八、Mongoose操作MongoDBM

一、搭建项目

1、新建一个文件存放项目

1651115583456

2、使用VSCode打开

建立package.json文件

  1. {
  2. "name": "mongoose_01",
  3. "version": "0.0.1"
  4. }

建立helloMongoose.js文件

1651135342774

安装与配置

  1. 当需要在webstormvscode时编写mongoose时,需要先将mongoose模块引入。步骤如下:
  2. 使用Mongoose:
  3. 1、下载安装 在终端输入命令行: npm i mongoose --save
  4. 2、引入mongose模块
  5. const mongoose = require('mongoose');
  6. 3 连接mongoDB数据库
  7. mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名');
  8. - 端口号是默认的 (27017), 则可以省略不写
  9. 4、断开连接(一般不用)
  10. mongoose.disconnect();
  11. 一般只需要连接一次,除非项目停止服务器关闭,否则连接一般不会断开
  12. -- 监听MongoDB数据库的连接状态
  13. - momgoose对象中, 有一个属性叫 connnection 用来监视数据库的链接状态
  14. mongoose.connection.once("open", ()=>{
  15. });
  16. mongoose.connection.once("close", ()=>{
  17. });
3、npm i mongoose —save
  1. PS E:\FrontEndProject\Mongoose\mongoose_01> npm i mongoose --save
  2. npm notice created a lockfile as package-lock.json. You should commit this file.
  3. npm WARN mongoose_01@0.0.1 No description
  4. npm WARN mongoose_01@0.0.1 No repository field.
  5. npm WARN mongoose_01@0.0.1 No license field.
  6. + mongoose@6.3.1
  7. added 28 packages from 67 contributors in 4.246s
4、引入与连接数据库
  1. //引入
  2. var mongoose = require("mongoose");
  3. //连接数据库
  4. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
5、运行
  1. VSCode安装Code Runner
  2. 然后右击js,点击Run Code运行

1651135490697

6、node运行连接数据库
  1. //引入
  2. var mongoose = require("mongoose");
  3. //连接数据库
  4. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  5. mongoose.connection.once("open", ()=>{
  6. console.log("数据库连接成功~~~");
  7. });
  8. PS E:\FrontEndProject\Mongoose> cd .\mongoose_01\
  9. PS E:\FrontEndProject\Mongoose\mongoose_01> node helloMongoose.js
  10. 数据库连接成功~~~

1651135980316

7、node运行断开数据库
  1. //引入
  2. var mongoose = require("mongoose");
  3. //连接数据库
  4. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  5. mongoose.connection.once("open", ()=>{
  6. console.log("数据库连接成功~~~");
  7. });
  8. mongoose.connection.once("close", ()=>{
  9. console.log("数据库连接断开~~~");
  10. });
  11. //断开数据库连接
  12. mongoose.disconnect();
  13. PS E:\FrontEndProject\Mongoose\mongoose_01> node .\helloMongoose.js
  14. 数据库连接成功~~~
  15. 数据库连接断开~~~
  16. PS E:\FrontEndProject\Mongoose\mongoose_01>

1651136233894

二、Schema和Model

01_mongoose_demo.js

  1. //引入
  2. var mongoose = require("mongoose");
  3. //连接数据库
  4. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  5. mongoose.connection.once("open", ()=>{
  6. console.log("数据库连接成功~~~");
  7. });
  8. //创建Schema(模式)对象
  9. //将mongoose.Schema 赋值给一个变量
  10. var Schema = mongoose.Schema;
  11. //创建Schema(模式)对象
  12. var stuSchema = new Schema({
  13. name:String,
  14. age:Number,
  15. gender: {
  16. type:String,
  17. default:"female"
  18. },
  19. address:String,
  20. });
  21. //通过Schema创建Model
  22. //Model代表的是数据库中的集合,通过Model才能对数据库进行操作
  23. //mongoose.model(modelName,schema);
  24. //modelName就是要映射的集合名(mongoose会自动将集合名变成复数)
  25. var StuModel = mongoose.model("student",stuSchema);
  26. //向数据库里插入一个文档(创建一个文档并插入到数据库中)
  27. // StuModel.create({
  28. // name:"孙悟空",
  29. // age:18,
  30. // gender:"male",
  31. // address:"花果山"
  32. // },function(err){
  33. // if(!err){
  34. // console.log("插入成功");
  35. // }else{
  36. // console.log("插入失败");
  37. // }
  38. // });
  39. StuModel.create({
  40. name:"白骨精",
  41. age:16,
  42. address:"白骨洞"
  43. },function(err){
  44. if(!err){
  45. console.log("插入成功");
  46. }else{
  47. console.log("插入失败");
  48. }
  49. });
  50. PS E:\FrontEndProject\Mongoose\mongoose_01> node .\01_mongoose_demo.js
  51. 数据库连接成功~~~
  52. 插入成功

1651138172138

1651138192869

三、Model

  1. #共有部分
  2. var mongoose = require("mongoose");
  3. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  4. mongoose.connection.once("open", ()=>{
  5. console.log("数据库连接成功~~~");
  6. });
  7. var Schema = mongoose.Schema;
  8. var stuSchema = new Schema({
  9. name:String,
  10. age:Number,
  11. gender: {
  12. type:String,
  13. default:"female"
  14. },
  15. address:String,
  16. });
  17. var StuModel = mongoose.model("student",stuSchema);
1、插入文档
  1. # 创建一个或多个对象
  2. Model.create(doc,[callback]);
  3. # 创建一个对象
  4. Model.createOne(doc, [callback]);
  5. # 创建多个对象
  6. Model.createMany(doc, [callback]);
  7. -doc是需要插入的文档
  8. -callback(err) 是回调函数,可以用来提示是否创建成功了
  9. // CRUD操作
  10. //插入操作
  11. StuModel.create([
  12. {
  13. name:"猪八戒", age:28, gender:"male", address:"高老庄"},
  14. {
  15. name:"唐僧", age:16, gender:"male", address:"女儿国"}
  16. ],function(err){
  17. if(!err){
  18. console.log("插入成功");
  19. }else{
  20. console.log("插入失败");
  21. }
  22. });

1651213040846

1651213062672

  1. // CRUD操作
  2. //插入操作
  3. StuModel.create([
  4. {
  5. name:"沙和尚", age:38, gender:"male", address:"流沙河"},
  6. ],function(err){
  7. if(!err){
  8. console.log(arguments);
  9. console.log("插入成功");
  10. }else{
  11. console.log("插入失败");
  12. }
  13. });

1651213808551

1651213823550

2、查询文档
  1. # 查询一个或多个文档
  2. Model.find(condition, 投影, [options], [callback]);
  3. -- 返回的是数组
  4. # 根据id查询一个文档
  5. Model.findById(id, 投影, [callback]);
  6. # 查询多个文档
  7. Model.findMany(condition, 投影. [callback]);
  8. # 查询一个文档
  9. Model.findOne(condition, [projection], [options], [callback]);
  10. -- condition 查询条件
  11. -- 投影/ projection: 投影,也就是 查询条件,有两种方式
  12. {
  13. name: 1, _id:0}: 1是显示,0是不显示 "name -_id"显示name, 不显示 _id
  14. -- options: 查询的选项, skip是跳过,limit是限制 {
  15. skip: 3, limit:3}
  16. -- callback: 回调函数,有两个参数(err, doc) err是错误类型, doc是文档。
  17. //查询操作
  18. StuModel.find({
  19. name:"唐僧"},function(err,docs){
  20. if(!err){
  21. console.log(docs);
  22. console.log("查询成功");
  23. }else{
  24. console.log("查询失败");
  25. }
  26. })

1651214417486

  1. //查询操作
  2. StuModel.find({
  3. name:"唐僧"},function(err,docs){
  4. if(!err){
  5. console.log(docs);
  6. console.log(docs instanceof StuModel);
  7. console.log("查询成功");
  8. }else{
  9. console.log("查询失败");
  10. }
  11. })
  12. StuModel.findById({
  13. _id:"626b82c9516240d7632ba335"},function(err,docs){
  14. if(!err){
  15. console.log(docs);
  16. console.log(docs instanceof StuModel);
  17. console.log("查询成功");
  18. }else{
  19. console.log("查询失败");
  20. }
  21. })

1651215164299

3、修改
  1. # 修改一个或多个文档
  2. Model.updateMany(condition, doc, [options], [callback]);
  3. # 修改一个文档
  4. Model.updateOne(condition, doc, [options], callback);
  5. ** Model.update() 已经不适用了
  6. -- condition 修改的条件
  7. -- doc 修改后的内容/需要修改的内容
  8. # 需要配合修改操作符来使用:
  9. $set 表示需要设置指定的属性
  10. $unset 表示需要删除指定的属性
  11. $push 表示给数组添加一个新元素,因为文档内也会有数组,数组便会有数组元素
  12. $addToset 表示给数组添加一个新元素,和push的区别是,如果出现同名的数组元素,则不会再添加
  13. $gt 大于
  14. $gte 大于等于
  15. $lt 小于
  16. $lte 小于等于
  17. $or [{
  18. 条件一,条件二}] 表示或的意思,符合条件一或者条件二
  19. $inc 表示自增,用在在原来数据的基础上对数据加减,可用于加薪减薪的操作
  20. //修改操作
  21. StuModel.updateOne({
  22. name:"唐僧"},{
  23. $set:{
  24. age:20}},function(err){
  25. if(!err){
  26. console.log("修改成功");
  27. }else{
  28. console.log("修改失败");
  29. }
  30. })
  31. StuModel.find({
  32. name:"唐僧"},function(err,docs){
  33. if(!err){
  34. console.log(docs);
  35. console.log("查询成功");
  36. }else{
  37. console.log("查询失败");
  38. }
  39. })

1651215970078

1651215809352

4、删除操作
  1. # 移除一个文档
  2. Model.remove(condition, [callback]);
  3. # 删除一个文档
  4. Model.deleteOne(condition, [callback]);
  5. # 删除多个文档
  6. Model.deleteMany(condition, [callback]);
  7. -- condition 条件
  8. //删除操作
  9. StuModel.remove({
  10. name:"白骨精"},function(err){
  11. if(!err){
  12. console.log("删除成功");
  13. }else{
  14. console.log("删除失败");
  15. }
  16. })

1651216361681

1651216371644

5、查看数量
  1. # 获取当前这个集合的符合条件的文档数量
  2. Model.count(condition, [callback]);
  3. StuModel.count({
  4. },function(err,count){
  5. if(!err){
  6. console.log(count);
  7. }
  8. })

1651216560498

四、Document

  1. document.save([options], [callback])
  2. document.update([options], [callback])
  3. collection.update不推荐使用。改用updateOneupdateManybulkWrite
  4. doc.get(name)
  5. 获取指定属性值
  6. doc.get("name") === doc.name
  7. doc.set("name", "猪猪") === doc.name = "猪猪"
  8. doc.id
  9. 属性, 获取id
  10. doc.toJSON()
  11. - 转换成 JSON
  12. doc.toObject()
  13. doc对象 转换成 普通JS对象, 转换后, 所有doc的属性和方法都不能使用了
  14. --这样就可以将 address给删掉了, 表面上删掉了, 数据库中没有删除
  15. doc = doc.toObject;
  16. delete doc.address;
  17. console.log(doc);
  18. var mongoose = require("mongoose");
  19. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  20. mongoose.connection.once("open", ()=>{
  21. console.log("数据库连接成功~~~");
  22. });
  23. var Schema = mongoose.Schema;
  24. var stuSchema = new Schema({
  25. name:String,
  26. age:Number,
  27. gender: {
  28. type:String,
  29. default:"female"
  30. },
  31. address:String,
  32. });
  33. var StuModel = mongoose.model("student",stuSchema);
  34. //传建一个document
  35. var stu = new StuModel({
  36. name:"奔波霸",
  37. age:48,
  38. gender:"male",
  39. address:"碧波谭"
  40. })
  41. console.log(stu);
  42. stu.save(function(err){
  43. if(!err){
  44. console.log("保存成功~~~");
  45. }
  46. })

1651220025326

1651220036889

  1. StuModel.findOne({
  2. },function(err,doc){
  3. if(!err){
  4. console.log("查询成功~~~");
  5. console.log(doc);
  6. }
  7. })

五、封装

一、连接mongodb数据库封装
1、创建tools文件夹,创建conn_mongodb.js文件

conn_mongodb.js

  1. //引入
  2. var mongoose = require("mongoose");
  3. //连接数据库
  4. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  5. //监听
  6. mongoose.connection.once("open", ()=>{
  7. console.log("数据库连接成功~~~");
  8. });

1651220843404

2、创建index.js文件
  1. require("./tools/conn_mongodb.js")

1651221488301

二、模块封装
1、创建tools文件夹,创建conn_mongodb.js文件

conn_mongodb.js

  1. //引入
  2. var mongoose = require("mongoose");
  3. //连接数据库
  4. mongoose.connect("mongodb://127.0.0.1/mongoose_test");
  5. //监听
  6. mongoose.connection.once("open", ()=>{
  7. console.log("数据库连接成功~~~");
  8. });

1651220843404

2、创建models文件夹,创建Student.js文件

Student.js

  1. /*
  2. 用来定义Student模型
  3. */
  4. var mongoose = require("mongoose");
  5. var Schema = mongoose.Schema;
  6. var StuSchema = new Schema({
  7. name:String,
  8. age:Number,
  9. gender: {
  10. type:String,
  11. default:"female"
  12. },
  13. address:String,
  14. })
  15. //定义模型
  16. var StuModel = mongoose.model("student",StuSchema);
  17. // exports.model = StuModel;
  18. module.exports = StuModel;
3、创建index.js文件

index.js

  1. require("./tools/conn_mongodb.js");
  2. // var Student = require("./models/Student.js").model;
  3. var Student = require("./models/Student.js");
  4. // console.log(Student);
  5. Student.find({
  6. },function(err,docs){
  7. if(!err){
  8. console.log(docs);
  9. console.log("查找成功");
  10. }else{
  11. console.log("查找失败");
  12. }
  13. })

1651591799376

发表评论

表情:
评论列表 (有 0 条评论,184人围观)

还没有评论,来说两句吧...

相关阅读