MongoDB_实战部分(二)

news2024/11/23 7:36:55

目录

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

一、MongoDB CRUD操作

MongoDB 插入文档

/*
    向数据库插入文档
    db.<collection>.insert()
    
    db.<collection>.insertOne() 插入一个文档
    db.<collectiom>.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、下载安装Mongoose
   npm i mongoose --save
  2、在项目中引入mongoose
   var 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.js

var 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("数据库连接成功~~~");
});
./测试模块化.js

require("./tools/conn_mongoose.js")

var Student = require("./model/student.js").model;

Student.find({},function(err,docs) {
  if(!err) {
    console.log(docs);
  }
});

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

MongoDB中文手册
MongoDB官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SDK 2019.1 - GNU Debugger (GDB) 不正常工作

报错截图 报错显示 warning: Can not parse XML target description; XML support was disabled at compile time warning: No executable has been specified and target does not support determining executable automatically. Try using the “file” command. " 解…

ROS service简单使用示例

1、为什么要使用ROS service 之前写过一篇关于ROS topic的内容。对于实时性、周期性的消息&#xff0c;使用topic来传输是最佳的选择。topic是一种点对点的单向通信方式&#xff0c;这里的“点”指的是node&#xff0c;也就是说node之间可以通过topic方式来传递信息。topic要经…

详细设计阶段复习

详细设计详细设计:确定具体实现方案,得出精确描述任务:结构程序设计:三种基本控制结构(选择[if]/顺序/循环[while|for])实现任何单入单出的程序人机界面设计:属于接口设计的重要组成问题设计指南设计工具:描述处理过程的工具程序流程图(历史悠久)盒图(N-S图): 不违背结构程序设…

[附源码]计算机毕业设计JAVA疫情环境下的酒店管理系统

[附源码]计算机毕业设计JAVA疫情环境下的酒店管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM…

机器学习实战——股票close预测

前言 用股票历史的close预测未来的close。 另一篇用深度学习搞得&#xff0c;见&#xff1a;深度学习实战——CNNLSTMAttention预测股票 技术栈 xgboostpython 原理 都是很简单的小玩意&#xff0c;试了下发现预测的还不错&#xff0c;先上效果图&#xff1a; 有点惊讶&a…

CSS中 设置( 单行、多行 )超出显示省略号

1. 设置超出显示省略号 css设置超出显示省略号可分两种情况&#xff1a; 单行文本溢出显示省略号…多行文本溢出显示省略号… 但使用的核心代码是一样的&#xff1a;需要先使用 “overflow:hidden;” 来把超出的部分隐藏&#xff0c;然后使用“text-overflow:ellipsis;”当文…

Java进阶架构师之如何画好架构图?阿里大神手把手教你!

1、什么是架构 架构就是对系统中的实体以及实体之间的关系所进行的抽象描述&#xff0c;是一系列的决策。 架构是结构和愿景。 系统架构是概念的体现&#xff0c;是对物/信息的功能与形式元素之间的对应情况所做的分配&#xff0c;是对元素之间的关系以及元素同周边环境之间…

基于灰狼算法优化的lssvm回归预测-附代码

基于灰狼算法优化的lssvm回归预测 - 附代码 文章目录基于灰狼算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于灰狼算法优化的LSSVM4.测试结果5.Matlab代码摘要&#xff1a;为了提高最小二乘支持向量机&#xff08;lssvm&#xff09;的回归预测准确率&#xff0c;对…

Java基础:Collection、泛型

第一章 Collection集合 1.1 集合概述 在前面使用过集合ArrayList&#xff0c;那么集合到底是什么呢&#xff1f; 集合&#xff1a;集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。 集合和数组既然都是容器&#xff0c;它们有啥区别呢&#xff1f; 数组的长…

DPDK 数据传输流程

在进行正式的收发包之前&#xff0c;DPDK需要做一些初始化操作&#xff0c;包括&#xff1a; 初始化一个或多个mbuf_pool&#xff0c;用来存储从网卡中接受的数据包修改网卡配置&#xff0c;指定其接受队列的个数&#xff08;通常每个转发核一个&#xff09;&#xff0c;长度&…

【Hadoop 2.7.1】HDFS Shell操作的简单试验

【Hadoop 2.7.1】HDFS Shell操作的简单试验 HDFS提供了多种数据访问的方式&#xff0c;其中&#xff0c;命令行的形式是最简单的&#xff0c;同时也是开发者最容易掌握的方式 文章目录【Hadoop 2.7.1】HDFS Shell操作的简单试验HDFS Shell命令的使用上传文件(put)查看文件列表(…

全网最详细Centos7搭建Redis集群

1、准备三台服务器 没有服务器的话&#xff0c;虚拟机也一样 2、每台服务器安装上redis 相关网址&#xff1a; CentOS7安装Redis完整教程_长头发的程序猿的博客-CSDN博客_centos7 redis安装 3、修改“139.196.105.140&#xff08;主机&#xff09;”的配置文件 vim /etc/r…

路由策略简介、配置举例

路由策略简介、配置举例 定义 路由策略主要实现了路由过滤和路由属性等设置功能&#xff0c;他通过改变路由属性&#xff08;包括可达性&#xff09;来改变网络流量所经过的路径。 目的优势 目的 路由协议在发布、接收和引入路由信息时&#xff0c;根据实际组网需求实施一些策…

25个网络安全搜索引擎备忘录

©网络研究院 下面介绍一个包含 25 个网络安全搜索引擎的列表&#xff0c;每个网络爱好者都应该在互联网中了解这些搜索引擎。 此列表没有特定顺序&#xff0c;主要基于使用偏好。 1. 搜索连接到互联网的设备 https://www.shodan.io/ 2. 无线网络数据库&#xff0c;带…

矩阵篇(五)-- 特征值分解(EVD)和奇异值分解(SVD)

1 特征值分解&#xff08;EVD&#xff09; 设AnnA_{n \times n}Ann​有nnn个线性无关的特征向量x1,…,xn\boldsymbol{x}_{1}, \ldots, \boldsymbol{x}_{n}x1​,…,xn​&#xff0c;对应特征值分别为λ1,…,λn\lambda_{1}, \ldots, \lambda_{n}λ1​,…,λn​ A[x1⋯xn][λ1x1⋯…

基于jsp+ssm的家庭理财系统

项目介绍 在这科技不断的进步&#xff0c;让我们的生活改变了很多&#xff0c;信息技术的迅速发展&#xff0c;使各种行业在信息技术应用方面变得非常普遍。信息时代的到来&#xff0c;已成为一种必然趋势。本系统的标题是基于B/S模式的家庭理财系统的设计开发&#xff0c;其目…

公钥密码(非对称加密)

实例 投币寄物柜是这样使用的&#xff1a; 首先&#xff0c;将物品放人寄物柜中。然后&#xff0c;投入硬币并拔出钥匙&#xff0c;就可以将寄物柜关闭了。关闭后的寄物柜&#xff0c;没有钥匙是无法打开的。只要有硬币&#xff0c;任何人都可以关闭寄物柜&#xff0c;但寄物…

Locust学习记录2-locust用户类属性【HttpUser,wait_time,weight和fixed_count】

HttpUser 每个模拟用户定义的类&#xff0c;都必须继承HttpUser&#xff0c;目的时为每个用户提供一个client属性&#xff0c;该属性是一个实例HttpSession&#xff0c;可用于向我们要进行负载测试的目标系统发出HTTP请求 当测试开始时&#xff0c;locust将为它模拟的每个用户…

vue项目分环境打包的具体步骤 --- 区分测试环境与线上环境的打包引用路径

第一步&#xff1a; 安装cross-env npm install --save-dev cross-env 运行跨平台设置和使用环境变量的脚本 第二步&#xff1a;修改package.json 在package.json 里设置打包命令 --- 主要是基于使用vue-cli创建的项目&#xff0c;配置文件基于 NODE_ENVproduction 去处…

图文多模态模型CLIP

前言 CLIP带给我的震撼是超过transformer的&#xff0c;这是OpenAI的重要贡献之一。就如官网所描述的&#xff1a; CLIP: Connecting Text and Images 用对比学习&#xff08;Contrastive Learning&#xff09;来对齐约束图像模型和文本模型。用文本嵌入指导图像学习&#xff…