MongoDB_实战部分(二)
创始人
2024-03-20 20:24:33
0

目录

  • 一、MongoDB CRUD操作
    • MongoDB 插入文档
    • MongoDB 查询文档
    • MongoDB 修改文档
    • MongoDB 删除文档
      • 练习题
  • 二、Mongoose
  • 三、VSCode连接MongoDB
    • 模块化

一、MongoDB CRUD操作

MongoDB 插入文档

/*向数据库插入文档db..insert()db..insertOne() 插入一个文档db..insertMany() 插入多个文档当我们向集合中插入文档时,如果每日一给文档指定_id属性,则数据库会自动给文档加_id,该属性用来作为文档的唯一标识手动生成唯一标识 ObjectId()
*//* 插入一个 */
db.system.version.insert({name:"猪八戒",age:28,gender:"男"})/* 插入多个 */
db.system.version.insert([{name:"孙悟空",age:30,gender:"男"},{name:"沙和尚",age:30,gender:"男"},{name:"白骨精",age:25,gender:"女"},
])db.system.version.find()ObjectId()// 生成_id属性,根据时间戳生成

MongoDB 查询文档

/*查询db.collection.find()find()用来查询集合中所有符合条件的文档find()可以接受一个对象作为条件参数{}表示查询集合中所有的文档{属性:值}查询属性是指定值的文档find()返回的是一个数组db.collection.findOne()用来查询集合中符合条件的第一个文档findOne()返回的是一个文档对象
*/db.system.version.find() // 查询全部
db.system.version.find({name:"猪八戒"})db.system.version.findOne({name:"猪八戒"})db.system.version.find({}).length() // 或者 db.system.version.find({}).count()

MongoDB 修改文档

/*修改db.collection.update(查询条件,新对象)-update() 默认情况下会使用对象来替换旧的对象-如果需要修改指定的属性,而不是替换需要使用”修改操作符“来完成修改$set 可以用来修改文档中的指定属性$unset 可以用来删除文档的指定属性-默认只修改第一条数据,但你想修改多条数据,只需要添加multi属性db.collection.updateMany()-同时修改多个符合条件的文档db.collection.updateOne()-修改一个符合条件的文档*/// 用age:99 替换 name为沙和尚的那一条信息,相当于把那条信息全删了,只留age属性
db.system.version.update({name:"沙和尚"},{age:99})// 用来设置属性或添加属性,不回替换
db.system.version.update({"name":"猪八戒"},{$set:{address:"高老庄"}},{multi:true} // 修改多个,默认修改一个
)// 删除_id为6386be638f7881827d491597 的数据
db.system.version.update({"_id":ObjectId("6386be638f7881827d491597")},{$unset:{}}
)// updateOne 修改一个
db.system.version.updateOne({"name":"猪八戒"},{$set:{address:"嘿嘿"}}
)
// 修改多个
db.system.version.updateMany({"name":"猪八戒"},{$set:{address:"呵呵呵"}}
)db.system.version.find()

MongoDB 删除文档

/*db.collections.remove()-删除符合条件的所有的文档(默认情况下会删除多个)-如果remove()第二个参数传递一个true,则只会删除一个-remove()必须传参db.collections.deleteOne()db.collections.deleteMany()db.collections.drop() 删除集合db.dropDatabase() 删除数据库*/db.system.version.find()db.system.version.remove({name:"猪八戒"},true)db.system.version.insert([{name:"猪八戒",age:30,gender:"男"},{name:"猪八戒",age:99,gender:"男"}])// 清空集合(性能略差)
db.system.version.remove({})// 显示集合中的文档
show collections// 删除集合
db.system.version.drop()

练习题

//1.进入my_test数据库
use my_test//2.向数据库的user集合中插入一个文档
db.user.insert({username:"小明"})show collections//3.查询user集合中的文档
db.user.find()//4.向数据库的user集合中插入一个文档
db.user.insert({username:"小红"})
db.user.insert({username:"sunwukong"})
//5.查询数据库user集合中的文档
db.user.find()//6.统计数据库user集合中的文档数量
db.user.find().count()//7.查询数据库user集合中username为sunwukong的文档
db.user.find({username:"sunwukong"})//8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
db.user.update({"username":"sunwukong"},{$set:{address:"huanguoshan"}})//9.使用{username : "tangseng"}替换username为 zhubajie的文档
db.user.insert({username:"zhubajie"})db.user.replaceOne({username:"zhubajie"},{username : "tangseng"})//10.删除username为sunwukong的文档的address属性
db.user.update({"username":"sunwukong"},{$unset:{address:1}})//11.向username为sunwukong的文档中,添加一个hoby:{cities:["beijing", shanghai", "shenzhen"],movies:["sanguo" , "hero")}
// MongoDB的文档属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称这个文档叫做,内嵌文档
db.user.update({"username":"sunwukong"},{$set:{hobby:{cities:["beijing", "shanghai", "shenzhen"],movies:["sanguo" , "hero"]}}})//12.向username为tangseng的文档中,添加一个hobby:{movies: [ "A Chinese Odyssey" , "King of comedy"]}
db.user.update({"username":"tangseng"},{$set:{hobby:{movies: [ "A Chinese Odyssey" , "King of comedy"]}}})//13.查询喜欢电影hero的文档
// MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配
// 如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号
db.user.find({"hobby.movies":"hero"})//14.向tangseng中添加一个新的电影Interstellar
// $push 用于向数组中添加一个新的元素
// $addToSet 向数组中添加一个新元素,如果数组中已经存在了该元素,则不会添加
db.user.update({"username":"tangseng"},{$push:{"hobby.movies":"Interstellar"}})db.user.find()//15.删除喜欢beijing的用户
db.user.remove({"hobby.cities":"beijing"})//16.删除user集合
db.user.drop()show dbs
//17.向numbers中插入20000条数据
db.numbers.remove({})
var arr = []
for(var i=1; i<=20000; i++){arr.push({num:i})
}
db.numbers.insert(arr)db.numbers.find()//18.查询numbersp num为 500的文档
db.numbers.find({num:500})//19.查询numbers中 num大于 500的文档
db.numbers.find({num:{$gt:500}}) // $gt > ; $gte >=//20.查询numbers中num小于 30的文档
db.numbers.find({num:{$lt:30}}) // $lt < ; $lte <=//21.查询numbers中 num大于 40小于50的文档
db.numbers.find({num:{$gt:40,$lt:50}})//22.查询numbersp num大于 19996的文档
db.numbers.find({num:{$gt:19996}})//23.查看numbers集合中的前10条数据
db.numbers.find().limit(10) // limit限制条数//24.查看numbers集合中的第11条到20条数据
// skip()用于跳过指定数量的数据
// skip(10).limit(10) 跳过前10条数据,从第11条开始显示,限制10条数据
db.numbers.find().skip(10).limit(10)//25.查看numbers集合中的第21条到30条数据
db.numbers.find().skip(20).limit(10)// MongoDB会自动调整skip和limit的位置
db.numbers.find().limit(10).skip(10)

二、Mongoose

Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。

Mongoose中为我们提供了几个新的对象

  • Schema(模式对象)
    Schema对象定义约束了数据库中的文档结构;
  • Model
    Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection;
  • Document
    Document表示集合中的具体文档,相当于集合中的一个具体的文档。

三、VSCode连接MongoDB

/*1、下载安装Mongoosenpm i mongoose --save2、在项目中引入mongoosevar mongoose = require("mongoose");3、连接MongoDB数据库mongoose.connect('mongodb://数据库的ip地址:端口/数据库',{useMongoClient:true});- 如果端口号是默认端口号(27017)则可以省略不写mongoose.connect('mongodb://127.0.0.1/my_test');-监听MongoDB数据库的连接状态mongoose.connection.once("open",function(){console.log("数据库连接成功~~~");});mongoose.connection.once("close",function(){console.log("数据库连接已经断开~~~");});4、断开数据库连接mongoose.disconnect()
*/// 引入
var mongoose = require("mongoose");// 连接数据库
mongoose.connect('mongodb://127.0.0.1/my_test');mongoose.connection.once("open",function(){console.log("数据库连接成功~~~");
});// 将mongoose.Schema赋值给一个变量
var Schema = mongoose.Schema;// 创建Schema(模式)对象
var stuSchema = new Schema({name:String,age:Number,gender:{type:String,default:"female"},address:String
});// 通过schema来创建Model
// Model代表的是数据库中的集合,通过Model才能对数据库进行操作
// mongoose.model(modelName,schem);
//modelName 就是要映射的集合名 mongoose会自动将集合名变成复数
var StuModel = mongoose.model("students",stuSchema)// 向数据库中插入一个文档
StuModel.create({name:"白骨精",age:20,address:"山洞"
},function(err) {if(!err) {console.log("插入成功!");}
})/* 查询Model.find(conditions,[projection],[options],[callback]) 查询所有符合条件的文档Model.findById(id,[projection],[options],[callback]) 根据文档的id属性查询文档Model.findOne([conditions],[projection],[options],[callback]) 查询符合条件的第一个文档 总和返回一个具体的文档conditions 查询的条件projection 投影,设置你想要的字段{name:1,_id:0} 或 {name,age,-_id}options 查询选项{skip:2,limit:1} 跳过三个,显示1个数据callback 回调函数,查询结构会通过回调函数返回,如果不传回调函数,压根不会查询
*/StuModel.find({},"name age -_id",{skip:2,limit:1},function(err,docs) {if(!err) {// docs 是数组 是Document,文档对象// Document对象是Model的实例console.log(docs);}
})/* 修改Model.update(conditions,doc,[options],[callback])Model.updateMany(conditions,doc,[options],[callback])Model.updateOne(conditions,doc,[options],[callback])- 用来修改一个或多个文档- 参数:conditions 查询条件doc 修改后的对象options 配置参数callback 回调函数
*/// 修改唐僧的年龄为20
/* StuModel.updateOne({name:"孙悟空"},{$set:{age:20}},function(err) {if(!err) {console.log("修改成功");}
}) *//* 删除Model.remove(conditions,[callback])Model.deleteOne(conditions,[callback])Model.deleteMany(conditions,[callback])
*//* StuModel.remove({name:"猪八戒"},function(err) {if(!err) {console.log("删除成功!");}
}) *//* 统计文档数量Model.count(conditions,[callback])*/StuModel.count({},function(err,count) {if(!err) {console.log(count);}
})

模块化

在这里插入图片描述

./model/student.jsvar mongoose = require("mongoose");// 将mongoose.Schema赋值给一个变量
var Schema = mongoose.Schema;// 创建Schema(模式)对象
var stuSchema = new Schema({name:String,age:Number,gender:{type:String,default:"female"},address:String
});var StuModel = mongoose.model("students",stuSchema);exports.model = StuModel;
./tools/conn_mongoose.js// 引入
var mongoose = require("mongoose");// 连接数据库
mongoose.connect('mongodb://127.0.0.1/my_test');mongoose.connection.once("open",function(){console.log("数据库连接成功~~~");
});
./测试模块化.jsrequire("./tools/conn_mongoose.js")var Student = require("./model/student.js").model;Student.find({},function(err,docs) {if(!err) {console.log(docs);}
});

结果截图:
在这里插入图片描述

MongoDB中文手册
MongoDB官方文档

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...