- 浏览: 1052106 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (345)
- Zookeeper (11)
- Hadoop (20)
- Concurrency (0)
- Linux (10)
- 语言入门 (1)
- Maven (10)
- Python (0)
- Lua (1)
- MongoDB (13)
- JSON (8)
- Gson (8)
- css (1)
- Velocity (5)
- Thrift (2)
- Struts2 (6)
- httpclient (1)
- 语言基础 (7)
- Java (12)
- Hessian (4)
- RPC (6)
- Burlap (1)
- HttpInvoker (1)
- ORM (8)
- MyBatis3 (8)
- Spring (3)
- Nginx (6)
- Log4j (2)
- EhCache (3)
- Cache (3)
- Quartz (0)
- Resin (1)
- JVM (9)
- 多线程 (2)
- 架构 (2)
- 备忘 (1)
- 分布式 (5)
- ElasticSearch (1)
- Redis (5)
- Memcached (2)
- Hive (19)
- Sqool (0)
- Storm (2)
- Pig (1)
- Sqoop (1)
- Scala (19)
- Spark (109)
- Kafka (14)
- Spark,Hadoop (1)
- Flume (3)
- Akka (1)
- Mysql (1)
- HBase (13)
- Avro (4)
- Parquet (2)
- 日志分析 (1)
- Mahout (3)
- WSO2 (0)
- 111 (1)
最新评论
-
jchubby:
关于第一个reduceByKey对应的cache,shuffl ...
【Spark三十七】Spark Cache机制 -
bo_hai:
看了你的文章,updateStateByKey 这个方式的使用 ...
【Spark八十八】Spark Streaming累加器操作(updateStateByKey) -
bo_hai:
棒极啦,解决了我的问题。
【Spark七十二】Spark的日志配置 -
tivan:
你好,这个代码生成主要在,那个地方使用。
【Spark105】Spark SQL动态代码生成一 -
zxsz4085:
看楼主这么厉害的样子,请问楼主如何知道类库的版本呢?比如g++ ...
【Thrift一】Thrift编译安装
MongoDB的主要操作
- show dbs 显示当前用户能看到哪些数据库
- use foobar 将数据库切换到foobar
- show collections 显示当前数据库有哪些集合
- db.people.update,update不带参数,可以用于察看源代码
- help可以查找帮助
- db.help()
- db.people.help();
测试数据:
var p1 = { "name":"Jack", "age":34, "nickname":"xiaoqiang", friends:[ {"name":"Cloe","age":"28"}, {"name":"Audrey","age":"31"}, ] } var p2 = { "name":"Cloe", "age":28, friends:[ {"name":"Jack","age":"34"}, {"name":"Mike","age":"31"}, ] } var p3 = { "name":"Audrey", "age":31, friends:[ {"name":"Jack","age":"34"}, {"name":"Hammer","age":"61","relation":"parent"}, ] }
MongoDB基本的增删改查操作
创建文档
1. 插入时MongoDB会检查文档是否包含_id,如果文档没有指定_id,MongoDB会为其创建;
2. 如果要插入的文档是多个,推荐使用批量插入。这样,可以减少连接MongoDB服务器的次数
3. MongoDB在插入文档时MongoDB仅检查传入数据是否包含_id以及数据大小是否超过16MB(v1.8-为4M),除此之外不再做任何验证,相对于SQL数据库的完整性校验操作,性能提高很多
依次插入:
use foobar db.people.insert(p1); db.people.insert(p2) db.people.insert(p3); db.people.find() //查询所有数据 db.people.findOne(); //返回第一条数据,即find()操作的第一条数据
批量插入:
use foobar db.people.remove(); var p = [p1, p2, p3]; db.people.insert(p); //MongoDB会将数组解释为文档集合,而不是插入集合本身 db.people.find();
更新文档
1.所谓的文档更新,实际效果是替换操作
2.默认情况下update只会更新第一个匹配到的文档,开启multi模式,才会更新所有匹配到的文档。在新版本的MongoDB中,multi update only works with $ operators
use foobar db.people.update({"name":"Jack"},{"age":40});//不出意外的发现,name为Jack的文档完全被替换了成{"age":40}而不是期望的把Jack的age属性改为40 db.people.update({"age":40},p1); //还原为原来的文档 p1.age = 40; db.people.update({"name":"Jack"},p1);//能够实现把name为Jack的文档的age改为40,其它保持不变,本质上还是替换操作,替换的是文档的内容,但是文档的主键保持不变
删除文档
如果要删除的文档中包含的文档非常多,使用db.people.drop()删除people这个文档,还要执行db.people.ensureIndex()
db.people.remove({"age":40}); //删除age为40的文档,首先做了一个查找age为40的查询 db.people.remove({ "_id" : ObjectId("54431f77f663556fc09af351")});//把主键作为删除的查询条件 db.people.remove();//不带任何参数,清空people集合中的所有文档
创建或者更新文档
1. 使用update操作,如果文档不存在,update结果无影响
2. 使用upsert操作(update方法的第三个参数为true),那么如果找不到要更新的文档,则做insert操作
use foobar p1.age = 40; db.people.update({"name":"JackNOtExit"},p1);//操作无影响 db.people.find(); db.people.update({"name":"JackNOtExit"},p1,true);//添加true作为第三个参数,操作的结果是新增一个新的文档
MongoDB修改器
- $inc 对指定的键做加法操作,如果指定的关键不存在,则新创建这个键,并且赋值为$inc指定的值。
- $set 为指定的键赋值,如果指定的键不存在,则自动创建。设值的情况比较复杂,比如为内嵌文档的某个Key设值,复杂点在于需要指定MongoDB能够解析到指定Key的表达式
- $unset $set的反操作,即它用来清除一个Key及其值
- $push 对数组进行操作(在MongoDB中,只有Javascript数组一种集合类型,其它语言如Java的各种集合类型都会保存为Javascript的数组),$push将一个元素追加到集合的末尾(不管这个元素是否存在于数组中),如果数组不存在,则首先创建数组
- $pushAll $push操作的批量版本,如果给$push操作提供一个数组作为参数,那么$push认为是把整个数组作为一个元素加入到指定的数组末尾
- $addToSet $pushAll的去重版本,即$addToSet实现了Java的Set集合的特性(Set中不能包含相同的元素)
- $pop 从数组中移除一个元素{$pop:{"key":1}}从数组末尾删除;pop:{"key":-1}}从数组开头删除;
- $pull 从数组中移除指定的元素
- $pullAll $pull的批量版本
- $rename 修改指定键的键名
$inc
1. MongoDB把inc作为变量使用,因此不能使用引号把$inc括起来
2. MongodDB的$inc操作,是getAndInc操作,因此,它不会与其它的$inc操作产生冲突
db.people.update({"name":"Jack"},{$inc:{"age":3}}); //为Jack的age属性加3,此时的update操作即针对键进行更新操作,而不是普通Update操作那样是个替换操作
$set
db.people.update({"name":"Jack"},{$set:{"age":34,"worklocation":"ctu"}});//Jack的age改为34,同时添加了一个新的键worklocation //$set作用于数组,相当于替换。使用$push/$pop操作数组元素 db.people.update({"name":"Jack"},{$set:{"friends":[{"Tony":"33"}]}}); //$set为Jack添加一个对象obj db.people.update({"name":"Jack"}, {$set:{"obj":{"value":1}}}); db.people.update({"name":"Jack"}, {$set:{"obj.value":2}}); //将Jack的obj对象的value值改为2,使用Javascript的点语法
$set定位修改$符
db.people.update({"name":"Jack"}, {$set:{"friends.1.age":35}}); //把Jack的friends数组的第二个元素(下标为1)的age改为35 db.people.update({"name":"Jack"}, {$set:{"friends.1.age":35}}); //把Jack的friends数组的第二个元素(下标为1)的age改为35 //把朋友中包含名字为Andrey的元素对应的age改为77,$在这里充当选出来的元素在数组中的下标 //friends.name的含义不是friends有个name键,而是指的是friends数组中的每个元素的name属性 db.people.update({"friends.name":"Audrey"}, {$set:{"friends.$.age":77}});
$unset
db.people.update({"name":"Jack"},{$unset:{"worklocation":"ctu"}});//把刚给Jack新加的键worklocation删除
$push
var item = {"name":"Tony","age":"33"}; db.people.update({"name":"Jack"},{$push:{"friends": item}}); //为Jack的friends添加一个元素item,item作为内嵌的文档,没有_id属性 var items = {item, item}; db.people.update({"name":"Jack"},{$push:{"friends": items}}); //为Jack的friends添加一个元素items,items作为friends的一个数组类型的元素
$pushAll
var items = {item, item}; db.people.update({"name":"Jack"},{$pushAll:{"friends": items}}); //为Jack的friends添加两个元素,分别是items数组中的元素
$addToSet
var items = {item, item}; db.people.update({"name":"Jack"},{$set:{"friends":[]}});//清空Jack的friends数组 db.people.update({"name":"Jack"},{$addToSet:{"friends": items}}); //通过addToSet为Jack的friends添加元素,奇怪的是没达到去重效果,即friends中包含两个一样的item
应该使用$each操作符
var items = {item, item}; db.people.update({"name":"Jack"},{$set:{"friends":[]}});//清空Jack的friends数组 db.people.update({"name":"Jack"}, {$addToSet:{"friends":{$each:items}}});
$pop
db.people.update({"name":"Jack"},{$pop:{"friends":-1}}); //friends指定了要删除元素的键;-1表示删除数组的头元素
$pull
db.people.update({"name":"Jack"},{$pull:{"friends":{"name":"Cloe"}}});; //从Jack的friends数组删除满足条件的元素,name是friends元素的一个属性,而不是friends本身的属性
MongoDB查询
更新操作包含了查询的语义,update操作的第一个参数就是指定查询条件,在这篇文章中,都是使用{"name":"Jack"}作为查询条件,实际上的查询条件要比这个复杂的多,下一篇博客将详细介绍MongoDB的查询,它类似于$修改器,MongoDB提供了很多用于设置查询条件的$比较器,$逻辑器等。
发表评论
-
【MongoDB学习笔记十四】MongoDB分片自动均衡
2014-11-21 00:44 1101假如MongoDB分片集群采用单调递增的字段作为片键,例如 ... -
[MongoDB学习笔记十三]MongoDB创建分片
2014-11-20 21:45 3126MongoDB分片简介 MongoDB分片用于解决海量数 ... -
[MongoDB学习笔记十三]MongoDB复制集的读写Semantics
2014-11-20 10:28 0默认情况下,在复本集中,用户的读写操作都发生在主服务器上,这 ... -
【MongoDB学习笔记十二】Mongo副本集服务器角色之Arbiter
2014-11-20 00:36 2425一、复本集为什么要加入Arbiter这个角色 回答 ... -
【MongoDB学习笔记十一】Mongo副本集基本的增删查
2014-11-19 22:07 1027一、创建复本集 假设mongod,mongo已经配 ... -
【MongoDB学习笔记十】MongoDB聚合与Map-Reduce
2014-10-20 20:49 0MongoDB同关系型数据库一样,也提供了聚合操作 c ... -
【MongoDB学习笔记九】MongoDB索引
2014-10-19 21:59 909索引 可以在任意列上建立索引 索引的构造和使用与传统 ... -
【MongoDB学习笔记八】MongoDB游标、分页查询、查询结果排序
2014-10-19 18:49 2233游标 游标,简单的 ... -
【MongoDB学习笔记七】MongoDB数据查询
2014-10-19 17:47 582MongoDB和SQL查询语句对比 查询的功能 ... -
【MongoDB学习笔记五】MongoDB概述
2014-10-18 14:49 465MongoDB是面向文档的NoSQL数据库,尽量业界还对M ... -
[Spring Data Mongo一]Spring Mongo Template操作MongoDB
2014-08-11 22:25 2737什么是Spring Data Mongo Spring ... -
[MongoDB学习笔记三]MongoDB分片
2014-08-06 23:51 751MongoDB的副本集(Replica Set)一方面解决 ... -
[MongoDB学习笔记二]MongoDB副本集
2014-08-06 19:15 15621. 副本集的特性 1)一台主服务器(Primary ... -
[MongoDB学习笔记一]MongoDB主从复制
2014-08-05 23:14 1586MongoDB称为分布式数据库,主要原因是1.基于副本集的 ... -
[MongoDB学习笔记一]MongoDB概览
2014-08-04 17:31 0MongoDB是一款NOSQL数据库,在本部分,介绍三部分 ...
相关推荐
mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复
mongodb学习笔记
自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。
MongoDB学习笔记思维导图.pdf
MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_学习笔记MongoDB_...
Mongodb 学习笔记
mongodb学习资料,包括mongodb_and_python学习笔记、mongodb权威指南、mongodb学习手册、mongodb总结。
mongoDB学习笔记及工具
主要介绍了MongoDB学习笔记之GridFS使用介绍,本文介绍了GridFS的作用、GridFS的一些使用方法、GridFS实现原理及注意事项等,需要的朋友可以参考下
总结的MongoDB的学习笔记,基本上包括了MongoDB的方方面面,每个知识点,都有示例代码,有需要的朋友,可以下载下来进一步补充完善。
MongoDB学习MongoDB学习MongoDB学习
一、关于MongoDB的驱动MongoDB支持多种语言的驱动,在此我们只介绍C#的驱动 二、通过samus驱动实现HelloWorld存取在进行下述操作之前,请
4、MongoDB修改 7 5、MongoDB删除 9 6、MongoDB分页 10 7、MongoDB模糊查询和其他条件查询 12 五、Mongoose(node使用)(前提安装好node环境有node基础) 13 1、连接 13 2、创建模式结构(Schema)定义约束了数据库中...
MongoDB 入门教程笔记
MongoDB 学习PPT