mongodb模糊查询_MongoDB的CRUD基本操作

fdeebe262e40f79c0a49c145281efff7.png

原创:牛津小马哥Python后端工程师小李哥。

ad2c224d5f28dd82ff75d701c5285aa3.png

在上周的推文中,我们介绍了MongoDB的数据库和集合的操作,现在,让我们来继续学习mongodb的另一个操作:CRUD

CRUD操作:创建、读取、更新、删除文档

创建操作(C)

创建或插入操作即向集合“collection”添加新的文档“documents”。如果插入时集合不存在,插入操作会创建该集合。

插入一个文档到文档集合中:

  • db.collection.insert()
> db.new_db.insert({name:'good day',content:{number:"8",place:"part"}})
WriteResult({ "nInserted" : 1 })

同时插入多个文档到集合中:

  • db.collection.insertMany()
>db.new_db.insertMany([{name:"rainy",content:{"number":"6","place": "part"}},{name:"sunny",content: {"number":"16", "place": "part"}}])
{"acknowledged" : true,"insertedIds" : [ObjectId("5df5ff197a95a0ed40e59705"),ObjectId("5df5ff197a95a0ed40e5970v")]
}

读取操作(R)

从集合中检索文档;即从文档中查询集合。MongoDB提供了以下方法来读取集合中的文档:

  • db.collection.find()

可以指定过滤器或条件来标识返回的文档。

查询所有数据

> db.new_db.find()
{ "_id" : ObjectId("5df5fd2d7a95a0ed40e59705"), "name" : "good day", "content" : { "number" : "6", "place" : "part" } } { "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "rainy", "content" : { "number" : "6", "place" : "part" } }
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }

如果你需要以易读的方式来读取数据,可以使用pretty() 方法

pretty() 方法以格式化的方式来显示所有文档。

> db.new_db.find().pretty()"_id" : ObjectId("5df5fd2d7a95a0ed40e59705"),"name" : "good day","content" : {"number" : "6","place" : "part"}
}"_id" : ObjectId("5df5ff197a95a0ed40e59709"),"name" : "rainy","content" : {"number" : "8","place" : "part"}
}"_id" : ObjectId("5df5ff197a95a0ed40e5970v"),"name" : "sunny","content" : {"number" : "16","place" : "part"}
}

查询中也可指定只返回哪些键,返回的结果只有“name”这个键的数据

> db.new_db.find({},{name:1})
{ "_id" : ObjectId("5df5fd2d7a95a0ed40e59705"), "name" : "good day" }
{ "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy" }
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny" }

查询数据库中带有指定键值的文档数据

> db.new_db.find({name:"rainy"})
{ "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" } }

$in方法:查询某个键满足在“$in”中指定的集合中的子集(检索name的字段值为“sunny”或者“rainy”的所有文档)

> db.new_db.find({name:{$in:["sunny","rainy"]}})
{ "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" } }
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }

AND条件:复合查询可以在集合文档的多个字段上指定条件。查询出的文档需同时满足指定的条件。

> db.new_db.insert({name:"rainy","content" : { "number" : "6", "place" : "part"},time:"15"})
WriteResult({ "nInserted" : 1 })
> db.new_db.find({name:"rainy",time:"15"})
{ "_id" : ObjectId("5df60eee7a95a0ed40e5970b"), "name" : "rainy", "content" : { "number" : "6", "place" : "part" }, "time" : "15" }

$or:查询出的文档需至少满足指定的一个条件

> db.locla.find({$or:[{name:"sunny"},{time:"15"}]})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
{ "_id" : ObjectId("5df60eee7a95a0ed40e5970b"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" }, "time" : "15" }

Mongodb中的条件操作符:$gt(>)、$gte(>=)、$lt(<)、$lte(<=)、$ne(!=)

> db.new_db.insert({name:"test","content" : { "number" : "6", "place" : "part"},time:15})
WriteResult({ "nInserted" : 1 })
> db.new_db.find({time:{$gte:10}})
{ "_id" : ObjectId("5df612ba7a95a0ed40e5970c"), "name" : "test", "content" : { "number" : "8", "place" : "part" }, "time" : 15 }

Like:模糊查询

(查询包含字母“u”的结果,等同于“like '%a%'”)

> db.new_db.find({name:/u/})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }

Count:查询记录条数,看数据中有多少条文档。

> db.new_db.count()
5

Sort :对数据进行排序

  • 升序
> db.new_db.find({"name": "sunny"}).sort({"time": -1})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
  • 降序
> db.new_db.find({"name": "sunny"}).sort({"time": 1})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }

Limit:限制返回的结果数量

> db.new_db.find().limit(2)
{ "_id" : ObjectId("5df5fd2d7a95a0ed40e59705"), "name" : "good day", "content" : { "number" : "6", "place" : "part" } } { "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" } }

更新操作(U)

使用 update() 和 save() 方法来更新集合中的文档

更新操作是修改现有的文档。有以下方法来更新集合文档。

  • db.collection.updateOne()
  • db.collection.updateMany()
  • db.collection.replaceOne()

指定条件或过滤器标识要更新的文档,再使用“$set”更新数据的内容。

> db.new_db.updateOne({name:"test"},{$set:{time:10}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

在MongoDB中,更新操作针对单个集合。对多个文档进行更新,使用updateMany即可。

 db.collection.replaceOne() 用来替换基于过滤器的集合中的一个文件。

要替换除_id 字段以外的文档的所有内容,请将一个全新的文档作为第二个参数传递给:

db.collection.replaceOne()

替换文档时,替换文档必须仅由字段/值对组成。替换文档可以具有与原始文档不同的字段

> db.new_db.replaceOne({name:"good day"},{name:"good day",content:"modified",time:22})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

删除操作(D)

指定条件或过滤器来找到要删除的文档。有以下删除集合文档的方法。

  • db.collection.deleteOne()
  • db.collection.deleteMany()
  • db.collection.remove()
> db.new_db.deleteOne({name:"good day"})
{ "acknowledged" : true, "deletedCount" : 1 }

查询出“name”值为“good day”的文档 ,并将其删除

deleteOne:即使多个文档可能与指定过滤器匹配,也最多删除一个与指定过滤器匹配的文档。

deleteMany:删除所有匹配指定过滤条件的文档。

Remove:删除单个文档或与指定过滤器匹配的所有文档。不传入条件时,删除所有的文档。

以上内容便是mongodb的CRUD操作介绍,感谢阅读!

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

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

相关文章

设计一个程序实现两个任意长的整数的求和运算_自然数集,整数集,有理数集等都有字母表示,为什么无理数集没有...

在网上翻到一个非常有意思的问题&#xff1a;这个问题乍看起来无厘头&#xff0c;但实际上是个非常深刻的问题&#xff0c;涉及到抽象代数(abstract algebra)的一些基本概念&#xff0c;因此我打算写篇文章来详细阐述一下。人类的数学从数数开始&#xff0c;最早诞生的概念是自…

php strpo函数,php strpos函数有什么用

php strpos函数有什么用&#xff1f;定义和用法strpos() f函数查找字符串在另一字符串中第一次出现的位置(区分大小写)。注释&#xff1a;strpos() 函数是区分大小写的。注释&#xff1a;该函数是二进制安全的。相关函数&#xff1a;strrpos() - 查找字符串在另一字符串中最后一…

oracle 客户端_【数据库 常见术语1】 客户端,服务端

这个系列会介绍并回顾在学习和工作中常碰到的一些名词&#xff0c;以及它们的意思。客户端&#xff0c;服务端&#xff08;以Oracle数据库为例&#xff09;**************************************************************************************【我的理解】 打个比喻&…

多个线程访问统一对象的不同方法_分析| 你未必真的了解线程安全,别骗自己,来看下怎么实现线程安全...

世界那么大&#xff0c;谢谢你来看我&#xff01;&#xff01;关注我你就是个网络、电脑、手机小达人什么是进程&#xff1f;电脑中时会有很多单独运行的程序&#xff0c;每个程序有一个独立的进程&#xff0c;而进程之间是相互独立存在的。比如下图中的QQ、酷狗播放器、电脑管…

php设置mysql查询编码,php连接mysql时怎么设置编码方式

php连接mysql时怎么设置编码方式php连接mysql数据库时&#xff0c;也就是在mysql_connect()语句之后添加“mysql_query("set names utf8");”语句来设置编码方式。注意&#xff1a;是utf8&#xff0c;不是utf-8&#xff1b;网页字符集也最好选用utf-8。在PHP连接数据…

pandas to_csv参数详解_【Python基础】Pandas数据可视化原来也这么厉害

一、可视化概述在Python中&#xff0c;常见的数据可视化库有3个&#xff1a;matplotlib&#xff1a;最常用的库&#xff0c;可以算作可视化的必备技能库&#xff0c;比较底层&#xff0c;api多,学起来不太容易。seaborn&#xff1a;是建构于matplotlib基础上&#xff0c;能满足…

oracle数据库重建em,oracle 11g em重建报唯一约束错误解决方法

oracle 11g em重建报唯一约束错误解决方法更新时间&#xff1a;2012年11月27日 15:07:33 作者&#xff1a;今天在手工配置Oracle11g的EM时总是报如下错误,也没有找到解决办法&#xff0c;以下是我的解决过程,希望可以帮助你们今天在手工配置Oracle11g的EM时总是报如下错误&am…

爬虫 404 try_Python爬虫MOOC笔记

写在前面的小于碎碎念最近在学习Python爬虫内容&#xff0c;其实很多知识在网上搜索一下都能查到&#xff0c;但是作为自己的一种学习记录&#xff0c;也是回顾与复习呀。这种东西真的变化超级快&#xff0c;以前可以直接爬取的内容&#xff0c;现在很多网站都增加了反爬机制&a…

python调用c++_python高性能编程之Cython篇 第一章

第一节 cython的潜能•Cython是一种编程语言&#xff0c;它将Python与C和C 的静态类型系统相结合。•Cython是一个将Cython源代码转换为高效的C或C 源代码的编译器。然后可以将此源代码编译为Python扩展模块或独立可执行文件。Cython的强大功能来自它结合了Python和C的方式&…

oracle获取序列并赋值,Oracle中序列的使用

数据库设计的三大范式第一条就是独立的表结构中必须有唯一主键来标识表中数据.在以往微软的SQL Server(duo版本)平台上.手动编码实现表中主键.并设定为自增列是极其简单.编码如下:typeidintnotnullprimarykeyidentity(1,1),在Oracle 10G中关于序列(Sequence)的使用.(A)Sequence…

oracle序时账是什么,序时账和明细账区别是什么

序时账和明细账区别&#xff1a;一、定义不同:1、明细账也称明细分类账&#xff0c;是根据总账科目所属的明细科目设置的&#xff0c;,用于分类登记某一类经济业务事项&#xff0c;提供有关明细核算资料。2、而序时账了&#xff0c;也称日记账&#xff0c;是指按照经济业务发生…

ui li 菜单 点击添加下级_【Qt开发】实现系统托盘,托盘菜单,托盘消息

概述系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域&#xff0c;linux在布告栏区域。应用程序系统托盘功能&#xff0c;是比较普遍的功能&#xff0c;本篇将详细的介绍如何实现该功能。演示Demo实现功能&#xff1a;1.应用启动后&#xff0c;任…

5g通用模组是什么_中国移动联合芯讯通发布5G终端、芯片及测试产业报告

11月19日&#xff0c;2020中国移动全球合作伙伴大会以“5G融入百业 数智引领未来”为主题在广州召开&#xff0c;从多个维度展现了中国移动运用5G技术驱动各行业转型升级的强大实力。并于21日在展会现场发布了《5G终端、芯片及测试产业报告》。5G终端、芯片及测试产业报告发布现…

dell网卡linux驱动,DELL R710 服务器 Linux 系统网卡驱动安装

DELL R710在装完AS4U7版本的Linux后发现&#xff0c;网卡没有识别出来。怀疑是网卡驱动没有装上&#xff0c;打电话给DELL的工程师&#xff0c;得到的答复是装系统前必须用随机带的引导盘来安装才能将网卡驱动装上。现在系统已经装完了&#xff0c;总不能重装一遍吧&#xff0c…

博客网站源代码_详解SEO布词以及网站排名优化技巧

首先&#xff0c;谈谈新手以及老手在认知上容易出现的SEO误区&#xff0c;我认为有以下几点因素&#xff0c;不容忽视。1、SEO优化就是为了排名、就是发外链不少人认为做SEO就是为了排名&#xff0c;完全不考虑网站文章的质量、可读性以及用户体验&#xff0c;甚至不惜使用一些…

惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开

2020年&#xff0c;可以说是英特尔最难受的一年&#xff0c;多年来的挤牙膏大法也不灵了&#xff0c;面对AMD更先进的7mm制程以及更多的线程数&#xff0c;加上本身更合理的售价&#xff0c;说实话就连一向占据处理器半壁江山的英特尔也感受到了很高的威胁。AMD撕裂者系列发布以…

linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...

压测工具其它有用工具在这里&#xff0c;我们会讨论主要的压力测试工具&#xff0c;选择合适的压测工具&#xff0c;才能准确衡量系统性能。好的压测工具有很多&#xff0c;可能的功能如下&#xff1a;发起压力监控性能监控系统使用率生成报告基准测试无非就是看系统能力是否达…

斐讯n1刷linux服务器,斐讯N1刷机Linux(Armbian)

一、降级N1打开ADB链接开始降级。降级后版本号不变二、第三方固件依然是上面的链接(官改v2.2)USB双头线链接HDMI借口最近的USB和电脑的USB进入线刷模式(电视不会显示任何东西&#xff0c;但是电脑会显示设备已连接)。打开上面的刷机工具刷入官改v2.2。理论刷完后重启即可进入安…

在linux cuda安装教程,Ubuntu20.04安装cuda10.1的步骤(图文教程)

安装前准备cuda的主要用途是深度学习&#xff0c;而目前主流的深度学习框架tensorflow2最高支持cuda 10.1&#xff0c;因此本文讲解在ubuntu 20.04系统上安装cuda 10.1的主要过程。首先要查看你的nvidia显卡驱动是否支持cuda10.1版本。在终端执行以下命令&#xff1a;nvidia-sm…

代码重构的方法和经验_关于烂代码优化重构的几点经验

是否已经读过前面两篇关于烂代码和好代码的文章&#xff1f;这些让人抓狂的烂代码&#xff0c;你碰到几种&#xff1f;什么才是好代码、高质量代码&#xff1f;工作中&#xff0c;总会不可避免的接触到烂代码&#xff0c;就像之前说的&#xff0c;几乎没有程序员可以完全避免写…