首页 > 数据库 >MongoDB cmd CRUD操作 对照SQL

MongoDB cmd CRUD操作 对照SQL

时间:2023-01-20 23:33:11浏览次数:60  
标签:stuNo CRUD 07 MongoDB cmd db stu time find


问题

​参考官方文档​使用MogoDB 你就要熟悉他的常用cmd命令,增删改查,聚合多表查询等基本操作,本片博客旨在教会大家快速上手MogoDB,对其有基本了解,会对照Oracle的SQL查询
注:本篇文章主要目的是针对第一次接手mogodb数据库想快速上手的小伙伴,当然已经上手的可以当做个操作符查询文章来看,看完本篇文章,基本得CAUD,聚合,函数查询应该就没问题了(我会持续更新文章中的各种操作,力求变成一份学习文档)
需要什么功能查看全文后直接搜索,命名都是按照标准书写

C

查询是操作量最大的命令 此处罗列单表查询 聚合查询看目录

find

单表查询

db.UserInfo.find({})
.projection({"ctime":"$ctime"})//输出指定字段,不写全部显示
.sort({_id:-1})//指定字段排序 1正序 -1倒序
.limit(100)//分页

简写查询

db.collection.find(query, projection)

返回符合条件的所有集合

db.Activity.find({"aId":"46aa3f07-f315-4651-b025-b6b16da44ee0"})

findOne

返回符合条件的一个集合

db.Activity.findOne({"aId":"46aa3f07-f315-4651-b025-b6b16da44ee0"})

R

新增

db.getCollection("StuRecord").insert({
"flag": 0,
"name": "test",
"schoolId": "172b7e1d-78f8-42e7-b631-7f2cf4da8888",
"stuNo": "1819149S1",
"time": "2020-05-21 17:37:36.0"
})

U

更新一个

db.getCollection("StuRecord").update({ _id: ObjectId("5d5a6b29a0ed552270f8a87a") }, {
$set: {
"flag": 0,
"name": "test",
"schoolId": "172b7e1d-78f8-42e7-b631-7f2cf4da8888",
"stuNo": "1819149S1",
"time": "2020-05-21 17:37:36.0"
}
})

批量更新

db.getCollection("DictionaryTable").updateMany({  "schoolId":"9af1edc5-3f02-46d4-b1b7-faf85fd3c9a4","type":22}, {
$set: {
"state": NumberInt(0),
}
})

D

介绍

​​参考文章​​

命令

解释

db.collection.remove()

Delete a single document or all documents that match a specified filter

db.collection.deleteOne()

Delete at most a single document that match a specified filter even though multiple documents may match the specified filter.3.2 新版功能.

db.collection.deleteMany()

删除所有匹配指定过滤条件的文档.3.2 新版功能.

删除所有文档

要想从集合中删除所有文档,传递一个空的 filter document {} 给db.collection.deleteMany()​db.collection.remove()​方法. 无条件删除
该方法返回了操作状态的文档:

删除满足条件的所有文档

要想删除匹配删除条件的所有文档,传递 filter 参数给​​db.collection.deleteMany()​​​ 方法或 ​​db.collection.remove()​​​ 方法.
例如:

db.Classes.remove({"schoolId":"56bb50a5-1441-4665-b368-9fc20efa8cd8"})
db.Classes.deleteMany({"schoolId":"56bb50a5-1441-4665-b368-9fc20efa8cd8"})

返回删除结果

{
"acknowledged" : true,
"deletedCount" : 2215
}

多表关联删除 批量删除

一对多关系中删除,可以通过条件循环删除
y相当于变量,代表当前文档对象

db.UserInfo.find({"schoolId":"20c5010a-e096-4c54-83be-61a9e35de69c"}).forEach(
function(y){
db.Account.remove({"userId" :y.uid});
// print(y);
}
);

多表关联新增 批量新增备份

db.TraineeVisit.find({ time: { $gte: "2019-07-01" }}).forEach(
function(y){
db.TraineeVisitHistory.insert({y});
// print(y);
}
);

操作符

条件操作符

$eq等于

db.Role.find({"schoolId" : {$eq:"4e98f1bc-3ad5-4f41-9969-39d10a022597"}})
db.Role.find({"type" : {$eq:1}})

$ne 不等于

db.Activity.find({"end":{$ne:1596211199000}})

sql

where end!= 50

$lt小于

db.Activity.find({"start":{$lt:1596211199000} })

sql

where start< 50

$lte小于等于

db.Activity.find({"start":{$lte:1596211199000} })

sql

where start<= 50

$gt大于

db.Activity.find({"end":{$gt:1596211199000} })

sql

where end> 50

$gte大于等于

db.Activity.find({"end":{$gte:1596211199000}})

sql

where end>= 50

$regex 模糊查询

db.Student.find({"county":{$regex:"顺德"}})
SELECT * FROM Student where name like "李%"

$exists 存在字段

查询该字段存在与集合中 但是存在不保证为空

//存在
db.ExcelOperation.find({"founder":{$exists:true}})
//不存在
db.ExcelOperation.find({"founder":{$exists:false}})

$ifNull 存在且不为null

当前字段存在且不为null 就会返回参数12(参数可以多种),类似三元表达式

db.ExcelOperation.aggregate([
{
$project: {
"founder": { $ifNull: [true, false] },
"state": { $ifNull: [1, 2] },
}
}
])

$cond if-else

语法中写操作符,返回一个布尔值,依据布尔值决定赋值于字段,then为true else为false,适用于聚合

db.ExcelOperation.aggregate([
{
$project: {
"dormitoryId": {
$cond: {
if: {
$eq: ["$state", 5]
},
then: 1,
else: 0
}

},
}
}
])

时间区间

注:时间字符串类型可以直接比较,不用转换,包括存储为字符串类型时间

db.Activity.find({"startTime":{$lte:"2020-07-21 23:59:59"},"endTime":{$gte:"2020-07-21 23:59:59"} })

聚合

聚合多表查询

一对多,一对一

主表

当前语句相当于查询所有

db.StuRecord.aggregate([

])

主表关联B表

db.StuRecord.aggregate([//A表
{
$lookup: {
from: "Student",//表
localField: "stuNo",//A表表内部字段与B对应字段
foreignField: "stuNo",//B表内部字段
as: "stu"//对象代替
}
},
{ $unwind: '$stu' },//一对一
])

查询结果,A表全显B表对象形式显示

MongoDB cmd CRUD操作 对照SQL_一对一

查询条件

条件可以写多个,B表需要使用对象调用

db.StuRecord.aggregate([//A表
{
$lookup: {
from: "Student",//表
localField: "stuNo",//A表表内部字段与B对应字段
foreignField: "stuNo",//B表内部字段
as: "stu"//对象代替
}
},
{ $unwind: '$stu' },//一对一
{
$match: {
"time": { $gte: "2020-07-10 00:00:00.0", $lte: "2020-07-10 23:59:59.9" },//A表条件
"stu.classId": "1cb54339-4e9c-4b8a-a35c-94f87f9663c0",//B表条件
}
},
])

MongoDB cmd CRUD操作 对照SQL_一对一_02

输出指定参数

db.StuRecord.aggregate([//A表
{
$lookup: {
from: "Student",//表
localField: "stuNo",//A表表内部字段与B对应字段
foreignField: "stuNo",//B表内部字段
as: "stu"//对象代替
}
},
{ $unwind: '$stu' },//一对一
{
$match: {
"time": { $gte: "2020-07-10 00:00:00.0", $lte: "2020-07-10 23:59:59.9" },//A表条件
"stu.classId": "1cb54339-4e9c-4b8a-a35c-94f87f9663c0",//B表条件
}
},
{
$project: {
"stuNo": "$stuNo",//输出指定字段
"classId": "$stu.classId",//输出指定字段,B表的需要对象调用
"isTime": {
$cond: {//if判断写法
if: {
$gt: ["$time", "2020-07-10 07:52:00"],
},
then: 1,
else: 0
}
}
}
},
])

MongoDB cmd CRUD操作 对照SQL_mogoDB_03

分组

db.StuRecord.aggregate([//A表
{
$lookup: {
from: "Student",//表
localField: "stuNo",//A表表内部字段与B对应字段
foreignField: "stuNo",//B表内部字段
as: "stu"//对象代替
}
},
{ $unwind: '$stu' },//一对一
{
$match: {
"time": { $gte: "2020-07-10 00:00:00.0", $lte: "2020-07-10 23:59:59.9" },//A表条件
"stu.classId": "1cb54339-4e9c-4b8a-a35c-94f87f9663c0",//B表条件
}
},
{
$project: {
"stuNo": "$stuNo",//输出指定字段
"classId": "$stu.classId",//输出指定字段,B表的需要对象调用
"isTime": {
$cond: {//if判断写法
if: {
$gt: ["$time", "2020-07-10 07:52:00"],
},
then: 1,
else: 0
}
}
}
},
{
$group: {
_id: "$stuNo",//需要分组字段
"isTime": { $push: "$$ROOT.isTime" },//$$ROOT 获取当前分组文档,可以查看组内文档
"time": { $push: "$$ROOT.time" },
"classId": { $push: "$$ROOT.classId" },

}
},
])

MongoDB cmd CRUD操作 对照SQL_字段_04

排序

排序有顺序,分组后还是分组前

db.StuRecord.aggregate([//A表
{
$lookup: {
from: "Student",//表
localField: "stuNo",//A表表内部字段与B对应字段
foreignField: "stuNo",//B表内部字段
as: "stu"//对象代替
}
},
{ $unwind: '$stu' },//一对一
{
$match: {
"time": { $gte: "2020-07-10 00:00:00.0", $lte: "2020-07-10 23:59:59.9" },//A表条件
"stu.classId": "1cb54339-4e9c-4b8a-a35c-94f87f9663c0",//B表条件
}
},
{
$project: {
"stuNo": "$stuNo",//输出指定字段
"classId": "$stu.classId",//输出指定字段,B表的需要对象调用
"time":"$time",
"isTime": {
$cond: {//if判断写法
if: {
$gt: ["$time", "2020-07-10 07:52:00"],
},
then: 1,
else: 0
}
}
}
},
{
$group: {
_id: "$stuNo",//需要分组字段
"isTime": { $push: "$$ROOT.isTime" },//$$ROOT 获取当前分组文档,可以查看组内文档
// "time": { $push: "$$ROOT.time" },
"classId": { $push: "$$ROOT.classId" },

}
},
{
$sort: {
time: 1//排序 1为升序,-1为降序
}
},
])

MongoDB cmd CRUD操作 对照SQL_一对一_05

索引

添加索引

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

db.collection.createIndex(keys, options)
db.Student.createIndex({"sid":1})

多个索引

createIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。

db.col.createIndex({"title":1,"description":-1})

MongoDB cmd CRUD操作 对照SQL_字段_06

查看索引

可以查看当前集合的所有索引

db.col.getIndexes()

查看索引大小

db.col.totalIndexSize()

删除索引

db.col.dropIndexes()

删除指定索引

db.col.dropIndex("索引名称")

​参考文章​

去重

函数

排序 sort

key为排序字段,1为正序,-1为倒序

db.COLLECTION_NAME.find().sort({KEY:1})


标签:stuNo,CRUD,07,MongoDB,cmd,db,stu,time,find
From: https://blog.51cto.com/u_15939406/6020849

相关文章

  • 安装mongodb
    环境:系统:OracleLinuxServerrelease8.6(基于:RedHatEnterpriseLinuxrelease8.6(Ootpa))背景:公司开始使用oracle,所以使用了OracleLinux,给我安装mongodb带来的很......
  • 无法将“c:\users\XXX\anaconda3\scripts\conda.exe”项识别为 cmdlet、函数、脚
      因为C盘空间不够所以把anaconda3移到D盘了结果PowerShell报错按图索骥找到profile.ps1  把路径修改正确即可! ......
  • 学习笔记——@PathVariable注解基本使用;@PathVariable注解属性;REST风格CRUD概述;实现PU
    2023-01-19一、@PathVariable注解基本使用1、获取URL中占位符2、占位符语法:{}3、实例代码:@RequestMapping("testPathVariable/{empId}")publicStringtestPath......
  • MongoDB 部署分片集群
    部署配置服务器:configsvr先生成.conf文件mkdir-p/data/mongodb/configsvrvim/data/mongodb/configsvr/configsvr.confsystemLog:destination:filelogAppe......
  • mongodb权限配置
    1、mongodb的mongo.conf文件启动参数(1)./mongod--port=27017--host=127.0.0.1--dbpath=db--logpath=27017.log--fork=truehttps://blog.csdn.net/GY325416/article/......
  • Mongodb密码设置
    Mongodb密码设置Mongodb版本4.4文章下面有写每一步的作用,不关心的可以跳过。本文代码块的代码都是在mongo命令行下执行。mongodb的每个数据库都可以有一个(管理员和密......
  • 解决:无法将“php”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    如果我们已经安装了PHP或者其他集成环境,但是在命令行执行php命令时还是报这个错误  那是因为没有配置环境变量在此电脑上右键,然后看下面这张图  然后在Path变......
  • Spring MVC CRUD示例
    CRUD(创建,读取,更新和删除)应用程序是用于创建任何项目的最重要的应用程序。它提供了开发大型项目的想法。在SpringMVC中,我们可以开发一个简单的CRUD应用程序。在这里,我......
  • brew install mongodb
    admin@admindeMac-mini/%[email protected]......
  • 关于CMDB
    关于CMDB:CMDB运维管理平台是由CMDB开发团队,针对目前服务器运维、监控,批量管理提出的一个开源、易用、实用的跨平台服务器运维管理平台。统筹来说cmdb就是将已有的规则......