MongoDB基本操作(增删改查)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

基本操作

     基本的“增删查改“,在DOS环境下输入mongo命令打开shell,其实这个shell就是mongodb的客户端,同时也是一个js的编译器默认连接的是“test”数据库

 

 

【出错】

  首先当我们用同样的方式打开mongodb,竟然开启不了,仔细观察“划线区域“的信息,发现db文件夹下有一个类似的”lock file”阻止了mongodb的开启,接下来我们要做的就是干掉它,之后,开启成功。

<1> insert 操作

数据库有了,下一步就是集合,这里就取集合名为“person”,要注意的就是文档是一个json的扩展(Bson)形式。

注意:书写格式为外面是(),里面的书{}。

 

文档是采用“K-V”格式存储的,如果大家对JSON比较熟悉的话,我相信学mongodb是手到擒来,我们知道JSON里面Value可能是“字符串”,可能是“数组”,又有可能是内嵌的一个JSON对象,相同的方式也适合于BSON。

常见的插入操作也就两种形式存在:“单条插入”和“批量插入”。

① 单条插入

先前也说了,mongo命令打开的是一个javascript shell。所以js的语法在这里面都行得通,看起来是不是很牛X。

 

   

② 批量插入

这玩意跟“单条插入”的差异相信大家应该知道,由于mongodb中没有提供给shell的“批量插入方法”,没关系,各个语言的driver都打通

了跟mongodb内部的批量插入方法,因为该方法是不可或缺的,如果大家非要模拟下批量插入的话,可以自己写了for循环,里面就是insert。

   

  <2> find 操作

我们将数据插入后,肯定是要find出来,不然插了也白插,这里要注意两点:

① “_id": 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性。

② 严格的按照Bson的形式书写文档,不过也没关系,错误提示还是很强大的。

 

 

日常开发中,我们玩查询,玩的最多的也就是二类:

①: >, >=, <, <=, !=, =。

②:And,OR,In,NotIn

这些操作在mongodb里面都封装好了,下面就一一介绍:

<1>"$gt", "$gte", "$lt", "$lte", "$ne", "没有特殊关键字",这些跟上面是一一对应的,举几个例子。

 

<2> "无关键字“, "$or", "$in","$nin" 同样我也是举几个例子

 

<3> 在mongodb中还有一个特殊的匹配,那就是“正则表达式”,这玩意威力很强的。

 

<4> 有时查询很复杂,很蛋疼,不过没关系,mongodb给我们祭出了大招,它就是$where,为什么这么说,是因为$where中的value就是我们非常熟悉,非常热爱的js来助我们一马平川。

 

 

<3> update操作

          update方法的第一个参数为“查找的条件”,第二个参数为“更新的值”。

 

 

更新操作无非也就两种,整体更新和局部更新,使用场合相信大家也清楚。

<1> 整体更新

不知道大家可还记得,我在上一篇使用update的时候,其实那种update是属于整体更新。

 

<2> 局部更新

有时候我们仅仅需要更新一个字段,而不是整体更新,那么我们该如何做呢?easy的问题,mongodb中已经给我们提供了两个修改器: $inc 和 $set。

① $inc修改器

$inc也就是increase的缩写,学过sql server 的同学应该很熟悉,比如我们做一个在线用户状态记录,每次修改会在原有的基础上自增$inc指定的值,如果“文档”中没有此key,则会创建key,下面的例子一看就懂。

 

② $set修改器

 

<3> upsert操作

这个可是mongodb创造出来的“词”,大家还记得update方法的第一次参数是“查询条件”吗?,那么这个upsert操作就是说:如果我没有查到,我就在数据库里面新增一条,其实这样也有好处,就是避免了我在数据库里面判断是update还是add操作,使用起来很简单。将update的第三个参数设为true即可。

 

<4> 批量更新

在mongodb中如果匹配多条,默认的情况下只更新第一条,那么如果我们有需求必须批量更新,那么在mongodb中实现也是很简单的,在update的第四个参数中设为true即可。例子就不举了。

 

<4> remove操作

remove中如果不带参数将删除所有数据,很危险的操作,在mongodb中是一个不可撤回的操作,三思而后行。

 

转载于:https://my.oschina.net/u/2312175/blog/635241

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

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

相关文章

Kubernetes + .NET Core 的落地实践

1容器化背景本来生活网&#xff08;benlai.com&#xff09;是一家生鲜电商平台&#xff0c;公司很早就停止了烧钱模式&#xff0c;开始追求盈利。既然要把利润最大化&#xff0c;那就要开源节流&#xff0c;作为技术可以在省钱的方面想想办法。我们的生产环境是由 IDC 机房的 1…

传说中的宇宙最水诺奖得主:本科历史学,却凭借“一纸”博士论文摘取诺贝尔物理学奖,出道即巅峰!...

全世界只有3.14 % 的人关注了爆炸吧知识他&#xff0c;到底是不是最水的诺奖得主&#xff1f;超模君曾经介绍了学历史&#xff0c;最终成为数学、物理大牛的威滕&#xff08;传送门&#xff09;&#xff0c;然而竟出现了德布罗意姥爷的高分点赞&#xff01;那今天&#xff0c;超…

linux 连接两个异构网,如何在Linux(或异构)网络上共享计算机?

在有关共享计算机的这两篇文章中的第 1 部分中&#xff0c;我描述了我的异构本地网络以及如何使用它来比较和测试不同操作系统和体系结构上的应用程序。有几种技术使一台工作站上的用户可以运行位于另一台工作站上的应用程序。SSH 提供到远程计算机的文本终端&#xff1b;可以使…

图片处理--熔铸特效

1、算法 r r*128/(gb 1);g g*128/(rb 1);b b*128/(gr 1);2、代码实现 public Bitmap render(Bitmap bitmap){if(bitmap null)return null;int width bitmap.getWidth();int height bitmap.getHeight();int[] pixels new int[width * height];bitmap.getPixels(pixels ,0…

栈和队列之用2个栈实现一个队列

import java.util.Stack;/*** @author chenyu* 题目:编写一个类,用2个栈实现一个队列,支持队列的基本操作(add poll peek)* 思路:栈的特点是先进后出,而队列是先进先出,我们用两个栈真好把顺序反过来实现类似队列的操作,如下,将1-5依次压入stackPush,* 再讲5-1倒入st…

Windows按名称排序问题

偶然发现一个按名称排序的文件夹内&#xff0c;文件顺序是混乱的&#xff0c;例如&#xff1a; 在一个文件夹内建立如下三个文件&#xff1a; 0F.txt 1A.txt 02.txt 按名称/升序排列&#xff0c; 将得到上述结果&#xff0c;0F在最前&#xff0c;02在最后。 百思不得其解&#…

作业四:产品同质化问题

产品同质化问题 首先&#xff0c;产品同质化的定义&#xff1a;产品在消费者选择购买的过程中由于其功能性利益与竞争产品相同可以被竞争对手所替代&#xff0c;竞争对手就成为我们的替代性产品。我们的产品和竞争对手的产品形成了产品的同质化&#xff08;引用自百度百科 如今…

基于事件驱动架构构建微服务第13部分:使用来自Apache KAFKA的事件并将投影流传输到ElasticSearch...

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part13-read-model-projection-project-streams-into-elasticsearch/在本教程中&#xff0c;我将展示如何从KAFKA读取流并将流投影到ElasticSearch中。我必须使用来自KAF…

惊呆了!这篇论文全文都是脏话,可编辑部居然对它评价极佳并发表了!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自&#xff1a;募格学术你见过最奇奇怪怪的论文是什么&#xff1f;一教授为了抗议三流科学杂志发送垃圾邮件&#xff0c;回复了一篇全文只重复七个脏话字眼的论文&#xff0c;可没想到的是&#xff0c;它竟然还被 出&#xff01;版…

linux daemon守护线程,线程8--守护线程Daemon

packagebook.thread;/*** Daemon(守护)线程* Daemon线程区别一般线程之处是&#xff1a;* 只有虚拟机中的用户线程(非Daimon线程)全部结束&#xff0c;Daemon线程就会立即结束,并且也不会调用finally里的语句。* daemon线程所产生的所有线程都是daemon的*/publicclassDaemon {s…

单IP无TMG拓扑Lync Server 2013:前端服务器

在前面的基础架构和活动目录两篇文章中&#xff0c;我们已经准备好了Lync Server的所有环境。其实今天虽然部署的是Lync Server 2013的Preview版&#xff0c;但实际上与我们部署Lync的步骤以及规范是完全一样的&#xff0c;所以大家完全可以抛开Lync Server 2013 Preview版本本…

栈和队列之仅用递归函数和栈操作逆序一个栈

import java.util.Stack;/*** recursion 递归的意思* @author chenyu* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1、2、3、4、5 栈顶到栈底是5、4、3、2、1* 将这个栈转置后栈顶到栈底依次为1、2、3、4、5* * 思路:需要两递归函数 * 第一个递归函数是去除栈…

MySQL学习笔记之五:存储引擎和查询缓存

一、存储引擎1、InnoDB⑴InnoDB是基于聚簇索引建立的&#xff0c;基于主键索引查询时&#xff0c;性能较好&#xff1b;它的辅助索引中必须包含主键列&#xff1b;因此&#xff0c;若表上的索引较多&#xff0c;为节约空间&#xff0c;主键应尽可能小⑵InnoDB支持自适应hash索引…

利用SOS扩展库进入高阶.NET6程序的调试

有时候我们可能想深入到程序的运行核心&#xff0c;去观察下内存分配情况以及堆栈内保存的东东&#xff0c;那么作为编程新贵的底层框架.NET6&#xff0c;又为我们提供了什么可用的观测工具呢&#xff1f;1.SOS 扩展是什么&#xff1f;SOS扩展库是Windows 附带的调试扩展库&…

java--用 * 打印出各种图形(新手请进)

------------------------------------ 代码&#xff1a; public class PrintTriangle { public static void main(String[] args) { System.out.println("左边正三角形"); printTopLeft(5); System.out.println("左边倒三角形&quo…

这种动作片还需要汽车特效?

1 奇奇怪怪的扣分点又增加了▼2 就是活好&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 不愧是律师&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 成都马拉松惊现美食街&#xff01;&#xff08;素材来源网络&#xff0c;侵…

c语言中把每个字母向前移1位,C语言:将字符串中的前导*号全部移到字符串的尾部。...

//规定输入的字符串中只包含字母和*号&#xff0c;fun函数&#xff1a;将字符串中的前导*号全部移到字符串的尾部。1 #include 2 void fun( char *a )3 {4 char b[81];5 char *c,*d;6 c a;7 int i 0;8 while (*c *)9 {10 c;11 }12 d c;13 while (*c ! \0)14 {15 b[i] *c;1…

Android之支付宝设计与开发

背景 在移动支付领域&#xff0c;支付宝支付占用巨大份额&#xff0c;根据艾瑞咨询公布的报告数据&#xff1a;2014Q3&#xff0c;支付宝斩获了82.6%的市场份额&#xff0c;在移动支付的霸主地位越来越稳固。财付通支付的发力点在微信支付和手Q支付&#xff0c;在移动支付…

秘境探索之一个.NET 对象从内存分配到内存回收

前方高能预警&#xff0c;新手慎入&#xff01;不听劝阻者&#xff0c;轻则郁闷堆积&#xff0c;重则生死看淡&#xff0c;对编程失去了念想&#xff0c;对生活失去了幻想&#xff01;好了&#xff0c;心理强大到NB的可以忽略前方若干警示。为了探索.NET对象的内存分配和回收销…