1、插入数据

  和关系型数据库一样,增加数据记录可以使用insert语句,这是很简单的。

  • 当插入数据时,如果此集合不存在,则MongoDB系统会自动创建一个集合,即不需要刻意预先创建集合
  • 每次插入数据时,如果没有显示指定字段"_id",则系统会自动为我们加入"_id"(为_id是系统默认生成的一个唯一索引)。_id是OBjectId类型的,其中ObjectId类型的值是由12个字节组成的,前4个字节表示的是一个时间戳(精确的秒),紧接着3个字节表示的是机器唯一标识,接下来2个字节表示的是进程的id,最后的3个字节表示的是一个随机的计数器。
  • 插入数据时_id字段不能重复,否则将发生异常。

例子:

> db.czx.insert({name:"zhangsan",age:20,sex:"male",tel:"12345678901"})
WriteResult({ "nInserted" : 1 })

> db.czx.find().pretty()
{
"_id" : ObjectId("593670d861dce208b23fc30c"),
"name" : "zhangsan",
"age" : 20,
"sex" : "male",
"tel" : "12345678901"
}

当然,mongodb shell也是支持批插入的(我们可以通过循环插入),insert与save()区别:当遇到_id相同的情况下,save完成保存操作,而insert将会报错

2、修改数据

  修改数据是由update来完成的,修改数据分两种:一种是只是针对具体的目标字段,其它部分不变;另一种是取代性的更改,即修改具体目标字段后,其他的字段会被删除。update用于已存在的集合。

db.collection.update(<query>,<update>,{upsert:<boolean>,multi:<boolean >,writeConcern: <document>})

参数说明:

  • query : update的查询条件
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

测试例子:

> db.czx.insert({name:"zhangsan",age:20,sex:"male",tel:"12345678901"})
WriteResult({ "nInserted" : 1 })

> db.czx.find().pretty()
{
"_id" : ObjectId("593670d861dce208b23fc30c"),
"name" : "zhangsan",
"age" : 20,
"sex" : "male",
"tel" : "12345678901"
}

  a、更改指定的字段

> db.czx.update({name:"zhangsan"},{$set:{name:"czx"},$inc:{age:19}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.czx.find().pretty()
{
"_id" : ObjectId("593670d861dce208b23fc30c"),
"name" : "czx",
"age" : 39,
"sex" : "male",
"tel" : "12345678901"
}

  b、更改指定字段并且删除其他字段

> db.czx.update({name:"czx"},{name:"sb"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.czx.find().pretty()
{ "_id" : ObjectId("593670d861dce208b23fc30c"), "name" : "sb" }

  c、更改多个文档的指定字段

> db.czx.find()
{ "_id" : ObjectId("593678aa61dce208b23fc30d"), "name" : "zhangsan", "age" : 20, "sex" : "male", "tel" : "12345678901" }
{ "_id" : ObjectId("593678f661dce208b23fc30e"), "name" : "sb", "age" : 20, "sex" : "male", "tel" : "12345678901" }
> db.czx.update({age:20},{$set:{age:21}},{multi:true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.czx.find()
{ "_id" : ObjectId("593678aa61dce208b23fc30d"), "name" : "zhangsan", "age" : 21, "sex" : "male", "tel" : "12345678901" }
{ "_id" : ObjectId("593678f661dce208b23fc30e"), "name" : "sb", "age" : 21, "sex" : "male", "tel" : "12345678901" }

  d、当指定文档找不到时插入新文档

> db.czx.find()
{ "_id" : ObjectId("593678aa61dce208b23fc30d"), "name" : "zhangsan", "age" : 21, "sex" : "male", "tel" : "12345678901" }
{ "_id" : ObjectId("593678f661dce208b23fc30e"), "name" : "sb", "age" : 21, "sex" : "male", "tel" : "12345678901" }
> db.czx.update({name:"czx"},{$set:{age:20}},{upsert:true})
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("593679b48bdb7d097ff6e2ce")
})
> db.czx.find()
{ "_id" : ObjectId("593678aa61dce208b23fc30d"), "name" : "zhangsan", "age" : 21, "sex" : "male", "tel" : "12345678901" }
{ "_id" : ObjectId("593678f661dce208b23fc30e"), "name" : "sb", "age" : 21, "sex" : "male", "tel" : "12345678901" }
{ "_id" : ObjectId("593679b48bdb7d097ff6e2ce"), "name" : "czx", "age" : 20 }

3、删除数据

删除数据用remove语句

>db.collection.remove(<query>,<justOne>)

  • query参数为可选的参数,查询选择器。
  • justOne也是可选的参数,是一个boolean类型的值,表示是否只删除匹配的第一个文档

  如果remove没有指定任何参数,它将删除集合中所有文档,但并不会删除集合对应的索引数据,如果想删除集合中所有的文档,同事也删除集合中的索引,我们可以使用MongoDB提供的drop方法。当用remove删除文档后,文档对象也会从磁盘上相应的数据文件中删去数据。

MongoDB 基本操作(增改删)的更多相关文章

  1. XML简单的增改删操作

    XML文件的简单增改删,每一个都可以单独拿出来使用. 新创建XML文件,<?xmlversion="1.0"encoding="utf-8"?> & ...

  2. js 属性增改删操作

    js 属性增改删操作,可参看菜鸟教程,这里记录一个小问题:disabled属性 使用setAttribute操作无法 禁用disabled属性,需使用removeAttribute操作,原因是只要有d ...

  3. DataFrame查增改删

    DataFrame查增改删 查 Read 类list/ndarray数据访问方式 dates = pd.date_range(',periods=10) dates df = pd.DataFrame ...

  4. MongoDB的增、删、改、查操作(五)

    按照我们关系型数据库的思想,一个服务器要想存放数据,首先要有数据库,表,字段,约束,当然了也少不了主键,外键,索引,关系等: 但是在MongoDB的世界里边,我们不用预先的去创建这些信息从而直接来使用 ...

  5. EF基本操作增、删、查、改、分页,join……等

    一.批量添加数据 static void Main(string[] args) { add(); add2(); Console.ReadKey(); } static void add() { D ...

  6. MongoDB基本操作(增删改查)

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

  7. python数据类型—列表(增改删查,统计,取值,排序)

    列表是最常用的数据类型之一,通过列表可以对数据实现方便的存储,修改等操作. 先声明一个空列表: >>> names = [] >>> names [] 可以存多个值 ...

  8. oracle函数自治事务解决不能增改删的语句操作

    CREATE OR REPLACE FUNCTION SEQ3 (v_bname in VARCHAR2) return NUMBER is pragma autonomous_transaction ...

  9. EF6增改删等常用基类

    using System; using System.Linq; using System.Threading.Tasks; using System.Linq.Expressions; using ...

随机推荐

  1. noip级别模板小复习

    不是很noip的知识点就不写了. dij什么的太easy就不写了. 缩点 注意\(Tarjan\)在缩边双和求强联通分量时候的区别. 一个要判断是否在栈内一个不要. 最后\(topsort\)来\(d ...

  2. C++ GUI Qt4学习笔记01

    C++ GUI Qt4学习笔记01   qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...

  3. 一、创建并打包Cordova的App工程

    1.创建ionic4 & Angular项目 ionic start myApp tabs --type=angular 2.添加ios和android平台 ionic cordova pre ...

  4. Eclipse Debug模式的开启与关闭问题简析_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境 ...

  5. 对postman的研究

    1.Postman可用作macOS,Windows和Linux操作系统的本机应用程序. 2.最常用的方法是GET,POST,PUT和DELETE.方法的名称是不言自明的.例如,GET使您可以从服务器检 ...

  6. 用PL/SQL登录显示 “无法解析指定标识符”

    错误现象: 为了看表空间是否完整建好,打开相应的连接工具plsql,但是打不开,显示  “无法解析指定标识符”: 处理方式: 首先点击取消直接登录,打开工具---->首选项,在路径上看指定好没有 ...

  7. Quantitative Strategies for Achieving Alpha(一)

    1. 怎么构建测试 所有的测试五等分,表明我们的回测的universe被分为五个组,根据我们要测试的公司因子的值. Quintiles provide a clear answer to that q ...

  8. 基于函数计算 + TensorFlow 的 Serverless AI 推理

    前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖.一键部署.本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性.自动弹性伸缩 ...

  9. Spring Cloud Commons教程(三)忽略网络接口

    有时,忽略某些命名网络接口是有用的,因此可以将其从服务发现注册中排除(例如,在Docker容器中运行).可以设置正则表达式的列表,这将导致所需的网络接口被忽略.以下配置将忽略“docker0”接口和以 ...

  10. I - Rake It In

    题目链接:https://nanti.jisuanke.com/t/A1538 题意:给一个4*4的方阵,k个回合,a和b轮流选一个2*2的矩阵和,a要使和最大,b要使和最小,选完后2*2矩阵要逆时针 ...