Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >玩转mongodb(四):细说插入、更新、删除和查询

玩转mongodb(四):细说插入、更新、删除和查询

作者头像
壮壮熊
修改于 2023-01-17 06:56:57
修改于 2023-01-17 06:56:57
2.3K00
代码可运行
举报
文章被收录于专栏:程序猿牧场程序猿牧场
运行总次数:0
代码可运行

插入:

代码语言:txt
AI代码解释
复制
    使用insert或save方法想目标集合插入一个文档:
代码语言:txt
AI代码解释
复制
    db.person.insert({"name":"ryan","age":30});
代码语言:txt
AI代码解释
复制
    使用batchInsert方法实现批量插入,它与insert方法非常类似,只是它接受的是一个文档数组作为参数。一次发送数十,数百乃至数千个文档会明显提高插入的速度。
代码语言:txt
AI代码解释
复制
    db.person.batchInsert([{"name":"ryan","age":30},{"name":"pitaya","age":2}]);
代码语言:txt
AI代码解释
复制
    如果在批量插入的过程中有一个文档插入失败,那么在这个文档之前的所有文档都会成功插入到集合中,而这个文档以及之后的所有文档全部插入失败。如果希望batchInsert忽略错误并且继续执行后续插入,可以使用continueOnError选项。shell并不支持这个选项,但所有的驱动程序都支持。 

更新:

代码语言:txt
AI代码解释
复制
    使用update方法来更新集合中的数据。update有四个参数,前两个参数是必须的。
代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);
代码语言:txt
AI代码解释
复制
    第一个参数:查询文档,用于定位需要更新的目标文档。
代码语言:txt
AI代码解释
复制
    第二个参数:修改器文档,用于说明要对找到的文档进行哪些修改。
代码语言:txt
AI代码解释
复制
    第三个参数:true表示要使用upsert,即如果没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新。
代码语言:txt
AI代码解释
复制
    第四个参数:true表示符合条件的所有文档,都要执行更新。

修改器:

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

代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

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

代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$inc":{"age":2}},true,true);//对符合name等于ryan的文档,age字段加2。

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

代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$set":{"language":["chinese"]}},true,true);//对符合name等于ryan的文档,添加一个language的数组
代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$push":{"language":"english"}},true,true);//给数组的末尾添加一个值。

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

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

each:与 push和

代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"
代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"

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

代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$pop":{"language":1}},true,true);//从数组的末尾删除一个元素
代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$pop":{"language":-1}},true,true);//从数组的头部删除一个元素

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

代码语言:txt
AI代码解释
复制
    db.person.update({"name":"ryan"},{"$pull":{"language":"english"}},true,true);

删除:

代码语言:txt
AI代码解释
复制
    使用remove方法删除集合中的数据。它可以接受一个查询文档作为可选参数。给定这个参数以后,只有符合条件的文档才能被删除。(删除数据是永久性的,不能撤销,也不能恢复)。
代码语言:txt
AI代码解释
复制
    db.person.remove({"name":"ryan"});//删除person集合中name字段的值等于ryan的所有文档。
代码语言:txt
AI代码解释
复制
    db.person.remove();//删除person集合中所有的文档。
代码语言:txt
AI代码解释
复制
    使用drop方法代替remove方法,可以大幅度提高删除数据的速度。但是这个方法不能指定任何限定条件。而且整个集合都会被删除,包括索引等信息,甚用!!
代码语言:txt
AI代码解释
复制
    db.person.drop();

查询:

代码语言:txt
AI代码解释
复制
    MongoDB中使用find方法来进行查询。查询就是返回一个集合中文档的子集,子集的范围从0个文档到整个集合。find方法接受两个参数。
代码语言:txt
AI代码解释
复制
    第一个参数决定了要返回哪些文档,参数的内容是查询的条件。
代码语言:txt
AI代码解释
复制
    第二个参数来指定想要的键(字段)。第二个参数存在的情况:键的值为1代表要显示,为0代表不显示。“\_id”默认显示,其他默认不显示。第二个参数不存在的情况:所有字段默认显示。
代码语言:txt
AI代码解释
复制
db.person.find({"name":"ryan"},{"name":1});
代码语言:txt
AI代码解释
复制
    **查询条件:**

lt、 lte、gt、 gte这四个,就是全部的比较操作符(没有

代码语言:txt
AI代码解释
复制
    db.person.find({"age":{"$lt":10}});
代码语言:txt
AI代码解释
复制
    这里提供一段小脚本,插入10万条数据,做之后的测试用。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(var i=0;i<100000;i++){
   db.person.insert({"name":"ryan"+i,"age":i});
}

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

代码语言:txt
AI代码解释
复制
    db.person.find({"age":{"$in":[1,3]}});//查询age等于1或3的文档。
代码语言:txt
AI代码解释
复制
    db.person.find({"age":{"$nin":[1,3]}});//查询age不等于1或3的文档。

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

代码语言:txt
AI代码解释
复制
    db.person.find({"$or":[{"name":"ryan2"},{"age":3}]});//查询name等于ryan2   或者   age等于3的文档。

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

代码语言:txt
AI代码解释
复制
    db.person.find({"age":{"

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

代码语言:txt
AI代码解释
复制
    db.person.find({"$where":function(){
代码语言:txt
AI代码解释
复制
        ...;//这里可以是任意的javascript语句。
代码语言:txt
AI代码解释
复制
    }})
代码语言:txt
AI代码解释
复制
    游标:利用游标可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者是执行其他的一些强大的操作。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var cursor = db.person.find();
while(cursor.hasNext()){
    obj = cursor.next();
    ...;//这里可以做任何事情。  
}
代码语言:txt
AI代码解释
复制
    **常用的shell:**

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

代码语言:txt
AI代码解释
复制
    db.person.find().limit(2);//查询符合条件的文档,显示前两个文档。

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

代码语言:txt
AI代码解释
复制
    db.person.find().skip(2);//查询符合条件的文档,显示跳过2个文档后剩余的所有文档。 

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

代码语言:txt
AI代码解释
复制
    db.person.find().sort({"name":1,"age":-1});//查询的结果,按照name升序,age降序来排序显示。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿牧场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
玩转MongoDB: 索引,速度的引领
数据库索引与书籍的索引类似,有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目后,就可以直接跳到目标文档的位置,这可以让查找的速度提高几个数量级。
MongoDB中文社区
2018/08/14
1.6K0
玩转MongoDB: 索引,速度的引领
最全 MongoDB 基础教程
MongoDB 创建数据库 - 格式:use DATABASE_NAME - use ruochen - db创建数据库需要插入一条数据才会在列表中显示 - db.ruochen.insert({'name': '若尘'}) - show dbs 删除数据库 格式:db.dropDatabase() - use ruochen - db.dropDatabase() - show dbs 创建集合 - 格式:db.createCollection(name, options)
ruochen
2021/02/17
11.5K0
最全 MongoDB 基础教程
MongoDB 学习笔记
1、文档 --> 对应关系数据库的行,也就是一条记录。它比关系数据库的行的功能要强大,更像是是某个具体的对象。文档以一种Map的形式展现出来,当然value可以是任意的类型,也可以继续是一个文档(递归的定义)
阳光岛主
2019/02/18
7200
MongoDB常用命令(2)
批量操作需要和选择器同时使用,第一个false表示不执行insertOrUpdate操作,第二个true表示执行批量
Tom弹架构
2022/01/04
1.1K0
MongoDB的使用
1、在概念上,MongoDB的文档与Javascript的对象相近,因而可以认为它类似于JSON。JSON(http://www.json.org)是一种简单的数据表示方式:其规范仅用一段文字就能描述清楚(其官网证明了这点),且仅包含六种数据类型。
GH
2020/04/09
3.7K0
python操作mongodb数据库
(6) $push: 和 $ pushAll 都是向数组属性添加元素。# 好像两者没啥区别
bear_fish
2018/09/20
1.8K0
零基础学习MongoDB(五)—— 文档CRUD操作
语法格式:db.COLLECTION_NAME.insertOne(document)
小丞同学
2021/08/16
1.3K0
玩转mongodb(一):初识mongodb
ongodb中有三元素:数据库,集合,文档,其中“集合”就是对应关系型数据库中的“表”,“文档”对应“行”。
壮壮熊
2022/08/18
1.2K0
玩转mongodb(一):初识mongodb
玩转mongoDB(六):索引,速度的引领(普通索引篇)
数据库索引与书籍的索引类似,有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目后,就可以直接跳到目标文档的位置,这可以让查找的速度提高几个数量级。
壮壮熊
2022/08/18
6010
玩转mongoDB(六):索引,速度的引领(普通索引篇)
MongoDB 集合与文档的相关操作
$pop修饰符删除数组中的第一个或者最后一个元素,给$pop传递-1会删除第一个元素传递1会删除最后一个元素
Power
2025/03/02
730
MongoDB 的 入门操作
为什么80%的码农都做不了架构师?>>> 1. 展示一下有那些数据库 show dbs use test show collections # 展示一下当前数据库的所有集合 2. 插入一条数据
北漂的我
2019/05/29
3890
MongoDB数据插入、删除、更新、批量更新某个字段
查询出hospitalName是xx医院和openId以2开头的所有记录,并且更新my_booking表中的payType为1.
周小董
2019/03/25
26.9K0
MongoDB数据插入、删除、更新、批量更新某个字段
MongoDB基本用法
顾翔
2024/09/10
890
MongoDB基本用法
玩转mongodb(二):mongodb基础知识
常用基本数据类型:nullnull用于表示空值或者不存在的字段:{"data":null}布尔型布尔类型只有两个值,true和false:{"data":true}、{"data":false}字符串字符串类型的数据是由UTF-8字符组成:{"data":"pingan"}正则表达式查询时,使用正则表达式作为限定条件,语法和javascript的正则表达式一样:{"data":/pingan/i}对象id对象id是一个12字节(24字符)的ID,是文档的唯一标识。{"data":ObjectId()}数值s
壮壮熊
2022/08/18
7350
玩转mongodb(二):mongodb基础知识
Studio 3T下操作MongoDB的基本命令(转载)
神农大表哥 数据库 围观1082次已关闭评论 编辑日期:2018-10-31 字体:大 中 小
拓荒者
2019/08/29
1.4K0
一口(很长的)气掌握mongodb基本操作nosql介绍安装mongodb库操作集合操作文档操作数据类型查询进阶聚合索引用户权限管理
nosql,全称是 not only sql, 即“不仅于sql”,相较于关系型数据库,nosql更加灵活,无需去维护复杂的数据关系。数据是json格式,更加直观易读。
章鱼喵
2018/09/26
3.1K0
一口(很长的)气掌握mongodb基本操作nosql介绍安装mongodb库操作集合操作文档操作数据类型查询进阶聚合索引用户权限管理
MongoDB权威指南学习笔记(1)--基础知识与对文档的增删改查
使用.来分割不同命名空间的子集合,例如一个博客系统可能包含两个集合,分别时blog.posts和blog.authors。
earthchen
2020/09/24
5.6K0
Mongodb PHP封装API类,实现基本的插入/修改/查询/删除操作
/* ============ 辅助操作接口API =============== */
程序猿的栖息地
2022/04/29
2.8K0
mongodb高级应用
一、  高级查询 查询操作符 条件操作符:db.collection.find({“field”:{$gt/$lt/$gte/$lte/$eq/$ne:value}}); 匹配所有:db.collection.find({age:{$all:[6,8]}});//字段的数组中符合全部条件才行。 判断字段存在:db.colletion.find({field:{$exists:true}})//还可用于remove等。 Null值的处理:db.collection.find({field:{“$in”:nul
一夕如环
2018/04/03
1.3K0
MongoDB
一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。 不采用关系型主要是为了获得更好得扩展性。当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。 通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的看法一致。 另外,不再有预定义模
用户1214487
2018/01/24
3.7K0
MongoDB
相关推荐
玩转MongoDB: 索引,速度的引领
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验