MongoDB的基础使用

1. 数据集操作

进入MongoDB控制台:

# 展示数据库
show dbs# 创建并使用数据库
use 数据库名
如:use articledb# 删除数据库
db.dropDatabase()

注:

数据库命名规则:数据库名可以是满足以下条件的任意UTF-8字符串。

  • 不能是空字符串(“”)
  • 不得含有(空格)、、$、1、和\o(空字符)
  • 应全部小写。
  • 最多64字节

默认数据库的作用:

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin:从权限的角度来看,这是root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

2. 集合操作(类似与表)

创建集合 :

db.createCollection("集合名称")

展示集合:

show collections
或
show tables

删除集合:

db.collection.drop()
或
db.集合名称.drop()

3. 文档操作(类似与数据)

a. 单个文档插入:

使用insert() 或 save() 方法向集合中插入文档,语法如下 :

db.集合名称.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})

b. 批量文档插入:

使用insertMany ([json数据,…])

db.集合名称.insertMany([
{"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null},{"articleid":"1000000","content":"今天天气真好,阳光明媚	","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null}
]);

c. 查询文档:

# 查询所有
db.集合名称.find()# 查询指定文档
db.集合名称.find({userid: "11"})# 查询文档,只返回查询到的第一条数据
db.集合名称.findOne({userid: "11"})# 投影查询(Projection Query):如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。
# 如:查询结果只显示 _id、userid、nickname :、
db.集合名称.find({userid:"1003"},{userid:1,nickname:1})

d. 文档的更新

  • 覆盖修改:会直接覆盖掉之前的内容
db.集合名称.update({_id:"1"},{likenum:NumberInt(1001)})

注:这里会将之前id为1的内容直接替换为后面指定的这个

  • 局部修改:
db.集合名称.update({_id:"2"},{$set:{likenum:NumberInt(889)}})

注:这里只会替换掉之前文档likenum的内容

  • 批量的修改

如:更新所有用户为 1003 的用户的昵称为 凯撒大帝 。

# 默认只修改第一条数据
db.集合名称.update({userid:"1003"},{$set:{nickname:"凯撒2"}})# 修改所有符合条件的数据
db.集合名称.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})
  • 列值增长的修改

如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用 $inc 运算符来实现。
需求:对3号数据的点赞数,每次递增1

db.集合名称.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})

e. 删除文档

  • 删除全部文档:(慎用)
db.集合名称.remove({})
  • 删除指定文档:
db.集合名称.remove({_id:"1"})

4. 分页查询

a. 统计查询数量:

  • 统计所有记录数
db.集合名称.count()
  • 按条件统计记录数:
db.集合名称.count({userid:"1003"})

b. 分页列表查询

可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。

基本语法:

db.集合名称.find().limit(条数).skip(条数)

如:

  • 查询前3条
db.集合名称.find().limit(3)
  • 查询第4和第5条
db.集合名称.find().limit(2).skip(3)

c. 排序查询

sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列

语法:

db.集合名称.find().sort(排序方式)

如:

  • 对userid降序排列,并对访问量进行升序排列
db.集合名称.find().sort({userid:-1,likenum:1})

注:
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit(),和命令编写顺序无关。

5. 其他复杂条件查询

a. 正则的复杂条件查询

MongoDB的模糊查询是通过正则表达式的方式实现的。语法为:

db.collection.find({field:/正则表达式/})
或 
db.集合名称.find({字段:/正则表达式/})

如:

  • 查询评论内容包含“老六”的所有文档
db.集合名称.find({content:/老六/})
  • 查询评论的内容中以“天气”开头的
db.集合名称.find({content:/^天气/})

b. 比较查询

<, <=, >, >= 这个操作符也是很常用的

语法如下:

db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value

如:

  • 查询点赞数量大于700的记录
db.集合名称.find({likenum:{$gt:NumberInt(700)}})

c. 包含查询

包含:$in操作符

不包含:$nin操作符

如:

  • 查询评论的集合中userid字段包含1003或1004的文档
db.集合名称.find({userid:{$in:["1003","1004"]}})
  • 查询评论集合中userid字段不包含1003和1004的文档
db.集合名称.find({userid:{$nin:["1003","1004"]}})

d. 条件连接查询

我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相 当于SQL的and)

语法为:

$and:[ { },{ },{ } ]

如:

  • 查询评论集合中likenum大于等于700 并且小于2000的文档:
db.集合名称.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})

如果两个以上条件之间是或者的关系,我们使用 操作符进行关联,与前面 and的使用方式相同

语法为:

$or:[ { },{ },{ } ]

如:

  • 查询评论集合中userid为1003,或者点赞数小于1000的文档记录
db.集合名称.find({$or:[ {userid:"1003"} ,{likenum:{$lt:1000} }]})

6. 常用命令小结

选择切换数据库:

use 数据库名

插入数据:

db.集合名称.insert({bson数据})

查询所有数据:

db.集合名称.find();

条件查询数据:

db.集合名称.find({条件})

查询符合条件的第一条记录:

db.集合名称.findOne({条件})

查询符合条件的前几条记录:

db.集合名称.find({条件}).limit(条数)

查询符合条件的跳过的记录:

db.集合名称.find({条件}).skip(条数)

修改数据:

db.集合名称.update({条件},{修改后的数据}) 
或
db.集合名称.update({条件},{$set:{要修改部分的字段:数据})

修改数据并自增某字段值:

db.集合名称.update({条件},{$inc:{自增的字段:步进值}})

删除数据:

db.集合名称.remove({条件})

统计查询:

db.集合名称.count({条件})

模糊查询:

db.集合名称.find({字段名:/正则表达式/})

条件比较运算:

db.集合名称.find({字段名:{$gt:值}})

包含查询:

db.集合名称.find({字段名:{$in:[值1,值2]}})或db.集合名称.find({字段名:{$nin:[值1,值2]}})

条件连接查询:

db.集合名称.find({$and:[{条件1},{条件2}]})或db.集合名称.find({$or:[{条件1},{条件2}]})  

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

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

相关文章

入侵渗透 抓取内网windows登陆密码及查看密文相关问题

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f; 密文存在哪个文件下&#xff1f;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 在Windows中&#xff0c;用户登录的密码不会以明文形式保存&#xff0c;会以加密形式存储。其默认使用NTLM或K…

R-Tree: 原理及实现代码

文章目录 R-Tree: 原理及实现代码1. R-Tree 原理1.1 R-Tree 概述1.2 R-Tree 结构1.3 R-Tree 插入与查询 2. R-Tree 实现代码示例&#xff08;Python&#xff09;结语 R-Tree: 原理及实现代码 R-Tree 是一种用于管理多维空间数据的数据结构&#xff0c;常用于数据库系统和地理信…

拿来即用的响应式布局方法

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 HTML 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 响应式设计是一…

【OceanBase诊断调优】—— 如何查看 Root Service 切换完成的时间点

本文详述如何查看 Root Service 切换完成的时间点。 在主 Root Service 节点上的 rootservice.log 搜索。 grep -i "START_SERVICE: full_service !!! start to work!!" rootservice.log[2023-12-08 14:35:58.927245] INFO [RS] ob_root_service.cpp:7111 [27152]…

ax200/ax201/ax210/ax211/ax411等intel网卡无法开启5G热点问题解决方案汇总

目录 故障原因解决方案windowslinuxkernel < 5.5kernel > 5.5方案1 修改linux内核模块代码&#xff08;iwlwifi内核模块&#xff09;&#xff0c;重新编译内核模块并重新导入方案2 修改hostapd代码 最后更新于2024.04.28 故障原因 根本原因是因为英特尔在内核中开启了LA…

算法模板——数据结构篇

声明&#xff1a;参考自acwing 目录 1.单链表 2.双链表 3.数组栈与队列 4.单调栈 1.单链表 int head,e[N],ne[N],idx;void init(){head-1;idx0; } void add_head(int x){ //head有实值e[idx]x,ne[idx]head,headidx; } void add(int k,int x){ e[idx]x,…

Python Flask Web教程:make_response的详细用法

在 Flask 中,make_response 是一个非常实用的函数,它可以用来构造响应对象。下面是 make_response 函数的详细用法: 基本用法 在 Flask 中,make_response 可以用来从返回的数据中创建一个响应对象。它接受几种不同类型的参数,并返回一个 Response 对象。 from flask im…

【CANoe示例分析】TCP Chat(CAPL) with TLS encription

1、工程路径 C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 15.3.89\Ethernet\Simulation\TLSSimChat 在CANoe软件上也可以打开此工程:File|Help|Sample Configurations|Ethernet - Simulation of Ethernet ECUs|Basic AUTOSAR Adaptive(SOA) 2、示例目…

面试题:斐波那契数列

题目描述&#xff1a; 写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列定义如下: F(0) 0 F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 解题方法&#xff1a; 算法1: 利用递归实现,这个方法效率有严重问题,时间复杂度为O(2^n) long long Fibon(int n) {if (…

微软如何打造数字零售力航母系列科普03 - Mendix是谁?作为致力于企业低代码服务平台的领头羊,它解决了哪些问题?

一、Mendix 成立的背景 Mendix的成立是为了解决软件开发中最大的问题&#xff1a;业务和IT之间的脱节。这一挑战在各个行业和地区都很普遍&#xff0c;很简单&#xff1a;业务需求通常被描述为IT无法正确解释并转化为软件。业务和IT之间缺乏协作的原因是传统的代码将开发过程限…

2024-4-28

今日流水账&#xff1a; 上午&#xff1a; 打CTF总不能爆零吧&#xff0c;所以看群里师傅说 D3CTF 的那道 qemu 逃逸很简单&#xff0c;所以就把他给做了然后还是在配内核环境&#xff0c;服了&#xff0c;还是不行捏~~~下午继续配&#xff0c;啊啊啊 好好的思考了一下&#xf…

WPF —— MVVM 指令执行不同的任务实例

标签页 设置两个按钮&#xff0c; <Button Content"修改状态" Width"100" Height"40" Background"red"Click"Button_Click"></Button><Button Content"测试"Width"100"Height"40&…

如何让用户听话?

​福格教授&#xff08;斯坦福大学行为设计实验室创始人&#xff09;通过深入研究人类行为20年&#xff0c;2007年用自己的名子命名&#xff0c;提出了一个行为模型&#xff1a;福格行为模型。 模型表明&#xff1a;人的行为发生&#xff0c;要有做出行为的动机和完成行为的能…

web安全---xss漏洞/beef-xss基本使用

what xss漏洞----跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;攻击者在网页中注入恶意脚本代码&#xff0c;使受害者在浏览器中运行该脚本&#xff0c;从而达到攻击目的。 分类 反射型---最常见&#xff0c;最广泛 用户将带有恶意代码的url打开&a…

Python常见的第三方库[详细解析]

Python是通过模块来体现库&#xff0c;常见的有标准库和第三方库。标准库是Python自带的库&#xff0c;在官方文档中可以查看&#xff0c;第三方库是其他大佬做出来的。 库它的优点有:1.降低程序员的学习成本 2.提高程序的开发效率 。 第1个常见的库为datetime&#xff0c;我们…

二叉树理论和题目

二叉树的种类 在我们解题过程中二叉树有两种主要的形&#xff1a;满二叉树和完全二叉树。 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为 2 的结点&#xff0c;并且度为 0 的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 这棵二叉树为满二叉树…

机器学习Sklean基础教程

Scikit-learn&#xff08;也称为 sklearn&#xff09;是一个使用 python 语言的机器学习模块&#xff0c;内置了大量的监督和无监督学习算法&#xff0c;主要用于数据挖掘和数据分析。 以下是一个简单关于如何使用 sklearn 进行机器学习的指导&#xff1a; 安装: 首先&#…

如何使用SOCKS5代理?

SOCKS5 是一个代理协议&#xff0c;在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色&#xff0c;使得内部网中的前端机器变得能够访问Internet网中的服务器&#xff0c;或者使通讯更加安全。那么&#xff0c;SOCKS5代理该如何使用呢&#xff1f; 首先需要获取…

Matlab实现CNN-LSTM模型,对一维时序信号进行分类

1、利用Matlab2021b训练CNN-LSTM模型&#xff0c;对采集的一维时序信号进行分类二分类或多分类 2、CNN-LSTM时序信号多分类执行结果截图 训练进度&#xff1a; 网络分析&#xff1a; 指标变化趋势&#xff1a; 代码下载方式&#xff08;代码含数据集与模型构建&#xff0c;附…

【Docker】常见命令汇总

1 镜像相关 1.1 查看镜像 # 查看镜像列表 docker images# 查看具体的镜像: sudo docker images <镜像名称> docker images centos # 指定具体 tag: sudo docker images centos:<tag> docker images centos:7.8.2003# 查看镜像 ID 列表: --q/--quiet docker ima…