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. C#基础知识之正则表达式

    正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 实例 下面的实例匹配了以 'S' 开头的单词: using Syste ...

  2. Laravel——缓存使用

    1.使用Redis类 use Illuminate\Support\Facades\Redis; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  3. 组件通信 Provide&&inject

    在父组件中利用Provide 注入数据,在所有的子组件都可以拿到这个数据 可以在vue 中用来刷新页面 <!DOCTYPE html> <html lang="en&quo ...

  4. python 文件夹下文件及文件夹名称获取

    import os dirct = 'D:/data' dirList=[] fileList=[] files=os.listdir(dirct) #文件夹下所有目录的列表 print('files ...

  5. Python---协程---重写多进程

    一. # 匹配一行文字中所有开头的字母import re s = 'i love you but you don\'t love me' # \b\m findallcontent = re.find ...

  6. layui数据表格排序图标被超出的表头挤出去

    如果表头过长,会出现超出显示三个省略号,然后把排序图标挤出去,看不到了, 效果如下 解决办法就是给图标加定位,过长的时候加上 .show-sort{ position: absolute; right ...

  7. springboot创建拦截器

    一.创建一个MyIntercepor实现HandlerInterceptor接口的类             二.创建一个WebMvcConfig实现WebMvcConfigurer的类       ...

  8. python+requests接口自动化框架

    为什么要做接口自动化框架 1.业务与配置的分离 2.数据与程序的分离:数据的变更不影响程序 3.有日志功能,实现无人值守 4.自动发送测试报告 5.不懂编程的测试人员也可以进行测试 正常接口测试的流程 ...

  9. mysql WHERE语句 语法

    mysql WHERE语句 语法 作用:如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句.珠海大理石平尺 语法:SELECT 列名称 FROM 表名称 WHERE 列 运算 ...

  10. websocket 传输数据帧打包 (client端)

    /* Vertion: 0.2.1 date: 2015.8.11 content: gcc 编译通过 */ //websocket 传输数据帧打包 client端 //参数:src 为输入字符串 / ...