mongodb 集合操作 (增删改查)
1、插入:
使用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并不支持这个选项,但所有的驱动程序都支持。
2、更新:
使用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);
3、删除:
使用remove方法删除集合中的数据。它可以接受一个查询文档作为可选参数。给定这个参数以后,只有符合条件的文档才能被删除。
(删除数据是永久性的,不能撤销,也不能恢复)。
db.person.remove({"name":"ryan"});//删除person集合中name字段的值等于ryan的所有文档。
db.person.remove();//删除person集合中所有的文档。
使用drop方法代替remove方法,可以大幅度提高删除数据的速度。但是这个方法不能指定任何限定条件。而且整个集合都会被删除,包括索引等信息,甚用!!
db.person.drop();
4、查询:
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万条数据,做之后的测试用。
1 for(var i=0;i<100000;i++){
2 db.person.insert({"name":"ryan"+i,"age":i});
3 }
$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语句。
}})
游标:利用游标可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者是执行其他的一些强大的操作。
1 var cursor = db.person.find();
2 while(cursor.hasNext()){
3 obj = cursor.next();
4 ...;//这里可以做任何事情。
5 }
常用的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降序来排序显示。
mongodb 集合操作 (增删改查)的更多相关文章
- 利用koa实现mongodb数据库的增删改查
概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...
- Hbase常用操作(增删改查)
Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区 作者:net19880504 [字体:大 中 小] 运行Eclipse,创建一个新的Java工程“HBa ...
- Android-Sqlite-OOP方式操作增删改查
之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...
- JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件
JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...
- nodejs对mongodb数据库的增删改查操作(转载)
首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...
- 69.nodejs对mongodb数据库的增删改查操作
转自:https://www.cnblogs.com/sexintercourse/p/6485381.html 首先要确保mongodb的正确安装,安装参照:http://docs.mongodb. ...
- Python 集合的各种操作 数学运算 关系操作 增删改查 生成式
# 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学 ...
- Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]
在Yii的开发中常常需要去使用Yii的增删改查方法,这些方法又可以多次变化和组合,带来全方位的实现对数据库的处理,下面对这些方法做一些简单的整理和梳理,有遗漏或是BUG,敬请指出.灰常感谢!!! 一. ...
- MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo
一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...
- webpack4+express+mongodb+vue 实现增删改查
在讲解之前,我们先来看看效果如下所示: 1)整个页面的效果如下: 2) 新增数据效果如下: 3) 新增成功如下: 4) 编辑数据效果如下: 5) 编辑成功效果如下: 6) 删除数据效果如下: 7) 删 ...
随机推荐
- ConversionService HttpMessageConverter
ConversionService是属于spring core部分 所有spring管理的bean等等 都使用它进行类型转换,而它又需要注册一些converter 来完成类型转换. 这个可以看我博客 ...
- LRU management
LRU management 字典树用来查找值,实现map<string,int>操作 tips:tot必须从一开始QAQ #include<bits/stdc++.h> us ...
- Golang通过反射获取结构体的标签
Golang通过反射获取结构体的标签 例子: package main import ( "fmt" "reflect" ) type resume struc ...
- Vagrant 手册之 Multi-machine 多机器
原文地址 Vagrant 可以在一个 Vagrantfile 中定义并控制多个虚拟机.这就是"multi-machine"环境. 这些机器可以协同工作或互相关联.multi-mac ...
- Vue过渡:用Velocity实现JavaScript钩子
Velocity is an animation engine with a similar API to jQuery's $.animate(). It has no dependencies, ...
- 【ABAP系列】SAP ABAP常用函数总结第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP常用函数总结第一 ...
- SQL查询返回去除重复数据的结果集
方法一: select * from tablename where id in (select id from tablename group by id havin ...
- 跨平台自动构建工具v1.0.2 发布
XMake是一个跨平台自动构建工具,支持在各种主流平台上构建项目,类似cmake.automake.premake,但是更加的方便易用,工程描述语法更简洁直观,支持平台更多,并且集创建.配置.编译.打 ...
- 正则表达式从入门到放弃「Java」
正则表达式能做什么? 正则表达式可以用来搜索.编辑或处理文本. 「都懂它可以处理文本,可到底是怎么回事?」 正则表达式的定义 百度百科:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特 ...
- c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。
/* 首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点 为起始点,进行深度优先.广度优先搜索遍历,并输出遍历的结果. */ #include <stdlib.h> #i ...