插入:

使用insert或save方法想目标集合插入一个文档:

db.person.insert({"name":"ryan","age":30});

使用batchInsert方法实现批量插入,它与insert方法非常类似,只是它接受的是一个文档数组作为参数。一次发送数十,数百乃至数千个文档会明显提高插入的速度。

db.person.batchInsert([{"name":"ryan","age":30},{"name":"pitaya","age":2}]);

如果在批量插入的过程中有一个文档插入失败,那么在这个文档之前的所有文档都会成功插入到集合中,而这个文档以及之后的所有文档全部插入失败。如果希望batchInsert忽略错误并且继续执行后续插入,可以使用continueOnError选项。shell并不支持这个选项,但所有的驱动程序都支持。

更新:

使用update方法来更新集合中的数据。update有四个参数,前两个参数是必须的。

db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

第一个参数:查询文档,用于定位需要更新的目标文档。

第二个参数:修改器文档,用于说明要对找到的文档进行哪些修改。

第三个参数:true表示要使用upsert,即如果没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新。

第四个参数:true表示符合条件的所有文档,都要执行更新。

修改器:

$set:用来指定一个字段的值。如果这个字段不存在,则创建它。对于更新而言,对符合更新条件的文档,修改执行的字段,不需要全部覆盖。

db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

$inc:用来增加已有键的值,或者该键不存在就创建一个。对于投票等有变化数值的场景,这个会非常方便。

db.person.update({"name":"ryan"},{"$inc":{"age":2}},true,true);//对符合name等于ryan的文档,age字段加2。

$push:向已有数组末尾加入一个元素。

db.person.update({"name":"ryan"},{"$set":{"language":["chinese"]}},true,true);//对符合name等于ryan的文档,添加一个language的数组

db.person.update({"name":"ryan"},{"$push":{"language":"english"}},true,true);//给数组的末尾添加一个值。

$addToSet:避免向数组插入重复的值。

db.person.update({"name":"ryan"},{"$addToSet":{"language":"english"}},true,true);

$each:与$push和$addToSet结合,一次给数组添加多个值。

db.person.update({"name":"ryan"},{"$push":{"language":{"$each":["Japanese","Portuguese"]}}},true,true);

db.person.update({"name":"ryan"},{"$addToSet":{"language":{"$each":["Japanese","Portuguese"]}}},true,true);

$pop:可以从数组的任何一端删除元素。

db.person.update({"name":"ryan"},{"$pop":{"language":1}},true,true);//从数组的末尾删除一个元素

db.person.update({"name":"ryan"},{"$pop":{"language":-1}},true,true);//从数组的头部删除一个元素

$pull:删除数组对应的值。全部删除。

db.person.update({"name":"ryan"},{"$pull":{"language":"english"}},true,true);

删除:

使用remove方法删除集合中的数据。它可以接受一个查询文档作为可选参数。给定这个参数以后,只有符合条件的文档才能被删除。(删除数据是永久性的,不能撤销,也不能恢复)。

db.person.remove({"name":"ryan"});//删除person集合中name字段的值等于ryan的所有文档。

db.person.remove();//删除person集合中所有的文档。

使用drop方法代替remove方法,可以大幅度提高删除数据的速度。但是这个方法不能指定任何限定条件。而且整个集合都会被删除,包括索引等信息,甚用!!

db.person.drop();

查询:

MongoDB中使用find方法来进行查询。查询就是返回一个集合中文档的子集,子集的范围从0个文档到整个集合。find方法接受两个参数。

第一个参数决定了要返回哪些文档,参数的内容是查询的条件。

第二个参数来指定想要的键(字段)。第二个参数存在的情况:键的值为1代表要显示,为0代表不显示。“_id”默认显示,其他默认不显示。第二个参数不存在的情况:所有字段默认显示。

db.person.find({"name":"ryan"},{"name":1});

查询条件:

$lt、$lte、$gt、$gte这四个,就是全部的比较操作符(没有$eq这个操作符),分别对应<、<=、>、>=。

db.person.find({"age":{"$lt":10}});

这里提供一段小脚本,插入10万条数据,做之后的测试用。

 for(var i=0;i<100000;i++){
db.person.insert({"name":"ryan"+i,"age":i});
}

$in、$nin,用来查询一个键的多个值。

db.person.find({"age":{"$in":[1,3]}});//查询age等于1或3的文档。

db.person.find({"age":{"$nin":[1,3]}});//查询age不等于1或3的文档。

$or,用来查询多个键的多个值。可以和$in等配合使用。

db.person.find({"$or":[{"name":"ryan2"},{"age":3}]});//查询name等于ryan2   或者   age等于3的文档。

$exists,查询的键对应是值是null的,默认会返回null和键不存在的文档。可以通过$exists来判断该键是否存在。

db.person.find({"age":{"$in":[null],"$exists":true}});//查询age等于null,并且键是存在的文档。

$where,用它可以在查询中执行任意的javascript,这样就能在查询中做(几乎)任何事情。为了安全起见,应该严格限制或者消除"$where"语句的使用。

db.person.find({"$where":function(){

...;//这里可以是任意的javascript语句。

}})

游标:利用游标可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者是执行其他的一些强大的操作。

 var cursor = db.person.find();
while(cursor.hasNext()){
obj = cursor.next();
...;//这里可以做任何事情。
}

常用的shell:

limit:只返回前面多少个结果。

db.person.find().limit(2);//查询符合条件的文档,显示前两个文档。

skip:跳过多少个结果后显示剩余的。

db.person.find().skip(2);//查询符合条件的文档,显示跳过2个文档后剩余的所有文档。

sort:用于排序。接受一个对象(一组键值对)作为参数,键对应文档的键名,值代表排序的方向。排序的方向可以是1(升序)或者-1(降序)。如果指定了多个键,则按照这些键被指定的顺序逐个排序。

db.person.find().sort({"name":1,"age":-1});//查询的结果,按照name升序,age降序来排序显示。

 

  喜欢请微信扫描下面二维码,关注我公众号--“精修Java”,做一些实战项目中的问题和解决方案分享。

玩转mongodb(四):细说插入、更新、删除和查询的更多相关文章

  1. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  2. oracle插入,更新,删除数据

    插入,更新,删除数据 oracle提供了功能丰富的数据库管理语句 包括有效的向数据库中插入数据的insert语句 更新数据的update语句 以及当数据不再使用时删除数据的delete语句 更改数据之 ...

  3. sqlserver 插入 更新 删除 语句中的 output子句

    官方文档镇楼: https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008/ms177564(v=sql.100) 从 ...

  4. 《mongoDB》基本操作-创建/更新/删除文档

    一:基本操作 - db; 当前选择的集合(等于数据库名) > db demo -  use db_name; 选择你要操作的集合 > use demo switched to db dem ...

  5. 2.MongoDB系列之创建更新删除文档

    1. 插入文档 // 单条插入 db.getCollection('blog').insertOne({'type': 'mongodb'}) // 批量 插入 db.getCollection('b ...

  6. MariaDB 插入&更新&删除数据(8)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  7. 数据库SQL语言学习--上机练习3(插入 更新 删除)

    上机练习3 . 将一个新学生记录(学号::姓名:陈冬:性别:男:所在系:信息系:年龄:20岁)插入到Student表中: ALTER TABLE Student ,); UPDATE Student ...

  8. DButils工具类能够用来获取数据库连接向数据库插入更新删除对象2

    package com.ctl.util; import java.awt.Color; import java.awt.Font; import java.awt.Insets; import ja ...

  9. trie树---(插入、删除、查询字符串)

    HDU   5687 Problem Description 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:  1.insert : 往神奇字典中插入一个单词  2.delete: 在神奇字 ...

  10. SQL.Cookbook 读书笔记4 插入更新和删除

    第四章 插入更新和删除 4.1 插入数据 ,'PROGRA','NEW YOURK'); 4.2 从一个表向另一个表中复制 insert into dept_east(deptno,dname,loc ...

随机推荐

  1. 逆着得最长路POJ1797

    POJ1797点击打开链接 这个题很是不错我感觉 很容易把这个题和上一个青蛙跳的题联系起来做,我也确实联系起来了,可还是没能完整得Ac,是因为我的算法思路还是最短路,这里错了 这个题目得要求是,从1到 ...

  2. Spring cache 缓存

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  3. Android实现带下划线的EditText(BUG修正)

    之前写了一个关于实现EditText显示下划线的例子,发现仍然存在一些问题,在此继续探索,原文链接:http://www.cnblogs.com/ayqy/p/3599414.html (零)另一个b ...

  4. JS下对日期进行比较

    20181019更新一个获取指定日期的function //获取指定日期 function getBeforeDate(n) { var n = n; var d = new Date(); var ...

  5. .netcore与vue的学习笔记001

    1.dnc的js引用 需要引用的js文件要放在解决方案下的wwwroot目录下.否则将无法获取到指定js文件,出现404错误 2.vue的相关运用 0)通过new Vue并传入object来实例化一个 ...

  6. 详解PhpSpreadsheet设置单元格

    PhpSpreadsheet提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式.图片.日期.函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到. 在 ...

  7. HDU 6205(尺取法)2017 ACM/ICPC Asia Regional Shenyang Online

    题目链接 emmmm...思路是群里群巨聊天讲这题是用尺取法.....emmm然后就没难度了,不过时间上3000多,有点.....盗了个低配本的读入挂发现就降到2800左右, 翻了下,发现神犇Clar ...

  8. 一分钟搞懂 JavaScript this 指向问题

    关于Javascript的this指向问题,网络上有很多分析文章,写的很好,比如这里和这里 我这里做一个简单的总结. 箭头函数的 this 箭头函数内的this指向外层函数定义时所在的作用域.如果没有 ...

  9. [Swift实际操作]七、常见概念-(4)范围CGRect的使用详解

    本文将为你演示区域对象CGRect的使用.你可以将区域对象,看作是点对象和尺寸对象的组合 首先导入需要使用到底界面工具框架 import UIKit 然后初始化一个区域对象,它的原点位于(0,0),宽 ...

  10. WIKI常用的表格设计模板

    域名服务器管理表格     数据库管理表格     软件路径说明表格   开发测试环境虚拟机表格