mongodb拾遗

查询选择器(默认前缀为db.test.)
语句 说明 备注
find() 查询全部数据 默认每200ms将数据flush到硬盘
find({id:1}) 精确查询
find({id:{$lt:5}) id小于5的全部数据 同样的还有$lte(小于等于)、$lt(小于)、$gt(大于)、$gte(大于等于)
find({id:[1,2]}) 某个范围内 $nin(不在某个范围内,低效,会使索引失效)、$ne(不等于,低效,会使索引失效)
find({$or:[{id:1},{id:2}]} 等同sql or $and(等同于sql and,find({$and:[{id:1},{name:"xiaoming"}]}))
find({id:{$existis:false}}) 返回存在/不存在某个字段的全部数据
find({‘detail.1.post‘:5}) 返回属性detail的第二个元素中post为5的数据
find({id:1},{_id:0,id:1,name:1}) 查询id为1的数据并只返回id和name,0不现实,1显示
find({}).sort({id:-1}) 查询所有数据并按id降序,1升序 大数据量时排序字段必须建立索引
find({}).skip(1).limit(4).sort({id:-1}) 查询所有数据并按id降序,且跳过前1行开始返回4条数据 尽量不要使用skip,性能差
find({array:[1,2]}) 精确匹配数组array为[1,2]的数据 find({array:1}) 查找所有数组中包含1的数据
find({"array.0":1}) 查找所有数据第一个元素为1的数据
find({array:[1,2]},{_id:0,"status.info":1}) 精确匹配数组array为[1,2]的数据并返回status属性的info字段 映射字段同样可用数组方式find({array:[1,2]},{_id:0,"status.0.info":1})
find({},{array:{"$slice":-1},"array.desc":0}) 返回数组array的最后一个元素
索引及查询优化
ensureIndex({name:1},{unique:true}) 为字段name建立唯一索引(该字段值必须唯一)unique:false为普通索引 db.system.indexes.find()查看索引,
如果对数组建立索引,那么数组中的每个元素都会建立索引
find().explain() 解释查询语句
ensureIndex({name:1,age:1}) 为字段name和age建立复合索引
dropIndex("name") 删除name索引
db.setProfilingLevel(1) 开启数据库监视功能,0关闭,1记录慢查询。2记录所有,所有监视结果都在system.profile中
增删改操作
insert({id:1,name:"xiaoming",age:2}) 添加一条数据 集合不存在自动创建
如果不显示指定_id则自动创建
update({query,update,<upsert>,<multi> query:查询条件
update:更新内容
upsert:是否查不到数据就插入
multi:是否只匹配第一个找到的数据
update({id:1},{$set:{name:"zhangsan"},$inc:{age:12}})将集合中id为1的name改成zhangsan,age在原基础上增加12
update({id:1},{name:"zhangsan",age:12})将集合中id为1的name改成zhangsan,age改成12并清除其他字段(区别在于是否有操作符如$set)
remove(<query>,<justone>) 删除数据
无参时,删除全部数据,不删除索引(数据为物理删除)
只有query的时候删除所有匹配的数据
有justone的时候删除匹配的第一个文档
高级特性
管道聚集 $match 过滤文档只传递匹配的文档到管道中的下一个步骤
$limit  限制管道中文档的数量
$skip  跳过指定数量的文档,返回剩下的文档
$sort  对所有输入的文档进行排序
$group  对所有的文档进行分组然后计算聚集结果
$first 返回group操作后的第一个值
$last 返回group操作后的最后一个值
$max 返回group操作后的最大值
$min 返回group操作后的最小值
$avg 返回group操作后的平均值
$sum 回group操作后的所有值的和
$out  将管道中的文档输出到一个具体的集合中,这个必须是管道操作的最后一步
db.test.aggregate([
           {
            $match:{status:"normal"}
            },
            {
             $group:{_id:null,count:{$sum:1}}
            }
])
mapreduce聚集 db.test.mapreduce(
 //map
 function(){
  emit(this.id,this.age);
 },
 //reduce
 function(key,values){
  return Array.sum(values);
 },
 //query
 {
  query:{status:"normal"},
  outresult:"result"
 }
)
简单聚集 distinct("name") 去重
find().count() 统计
group 分组
sql:select _id,sum(value) count csum from coll where _id<3 group by _id
group(
 {
  key:{_id:1},
  cond:{_id:{$lt:3}},
  reduce:function(cur,result){
   result.count+=cur.value
  },
  initial:{count:0}
 }
)统计_id小于3,按照_id分组求value值的和
key:用来分组文档的字段。和keyf两者必须有一个
keyf:可以接受一个javascript函数。用来动态的确定分组文档的字段。和key两者必须有一个
initial:reduce中使用变量的初始化
reduce:执行的reduce函数。函数需要返回值。
cond:执行过滤的条件。
finallize:在reduce执行完成,结果集返回之前对结果集最终执行的函数。可选的
sql:select a,b,sum(c) csum from coll where active=1 group by a,b
db.coll.group(
           {key: { a:true, b:true },
            cond: { active:1 },
            reduce: function(obj,prev) { prev.csum += obj.c; },
            initial: { csum: 0 }
            });
group和distinct返回的结果集不能大于16mb,不能在分片集群上进行操作且group不能处理超过10000个唯一键值,超过这个限制只能使用管道或者mapreduce
复制集 三节点组成,一个主节点,一个从节点,一个哨兵节点,哨兵节点不存储任何数据,只负责管理和处理故障时发生的问题
分片 同redis分片,mysql分区。三台独立mongo,每个可做复制集。每台都有一个configure服务器,一台路由服务器
启动configure服务器
启动mongos路由服务器
启动分片服务器
使用sh.addshard添加分片到路由服务器
注:集合设置分片才能进行分片,且片键上必须有索引sh.enablesharding("test") 
当chunk不平衡时自动启动平衡器
所有客户端通过连接路由服务器来连接数据库
不包含索引和片键的查询会查询所有数据
只包含片键的会只查询片键归属的一个片上的所有数据
包含片键和索引的会查询片键归属的片并按索引高效查询
不能使用升序字段做片键
不推荐使用随机字段做片键
不推荐范围有限的字段做片键
片键应具有分发写操作、读操作不能太过随机化(尽量局部化)、要保证chunk一只能被分割的特性,故此片键通常需要有几个字段进行组合,如_id和city
文件系统 小于16mb的文件可直接转化成二进制存储
gridfs默认切割成每个256kb的小块
监控及管理
导入导出 mongoexport、mongoimport
备份恢复 mongodump、mongorestore 集群备份:禁用平衡器、停止每个片上的second节点和配置服务器、备份,重启复制集成员、重启平衡器
集群恢复:停止所有实例、恢复每个片中的数据、恢复配置服务器、重启所有实例、执行db.printshardingstatus()确保集群是可操作的
数据库监控 mongostat、mongotop、serverstatus、stats
web控制台监控 端口号28017,2.6以前默认启动,之后默认关闭,启动时加入参数httpinterfacetrue开启
权限 启动时加入auth=true
用户-角色(一对多)-权限(一对多)
可针对到库设置用户和权限
客户端 MongoVUE   免费不好用
Robomongo  推荐

时间: 2024-10-24 01:08:42

mongodb拾遗的相关文章

ubuntu安装mongodb

参考:http://blog.csdn.net/zhushh/article/details/52451441 1.导入软件源的公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 2.为mongodb创建软件源list文件 ubuntu12.04 echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multi

mongodb 安装、windows服务、创建用户

http://www.cnblogs.com/best/p/6212807.html 打开MongoDB的安装目录如“C:\Program Files\MongoDB\Server\3.4\bin”,并在此目录下新建一个mongo.config文件,文件内容如下: ##数据库目录## dbpath=C:\data\db ##日志输出文件## logpath=C:\data\log\db.log 使用cmd进入命令行 使用cd切换目录到安装目录下,如:cd  C:\Program Files\Mo

MongoDB 学习笔记之 WriteConcern

WriteConcern: 转载:MongoDB WriteConcern(写关注)机制 http://www.ywnds.com/?p=3688&viewuser=40 MongoDB部署模式 MongoDB的部署模式有三种:第一种是单机模式(开发测试):第二种是高可用复制集:第三种是可扩展分片集群.如下图所示. 知道了MongoDB几种常用的部署模式之后,接下来我们看看每种部署模式的写操作过程. MongoDB单点写操作 从上图可以看出,其中primary是MongoDB的一个实例,里面有两

MongoDB副本集

简介 mongodb复制(replication)是将数据同步在多个服务器的过程.主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致.复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并保证数据的安全性.复制还允许您从硬件故障和服务中断中恢复数据. 而副本集(replica set)是从mongodb 1.6 提供的新功能,比复制功能要强大一些并增加了故障自动切换和自动修复成员节点,

mongodb 学习

该命令如果数据库不存在,将创建一个新的数据库, 否则将返回现有的数据库.如果想创建一个数据库名称为 <mydb>, 那么 use DATABASE 语句应该如下: >use mydb switched to db mydb=============================================================================要检查当前选择的数据库使用命令 db >db mydb============================

MongoDB之update

Update操作只作用于集合中存在的文档.MongoDB提供了如下方法来更新集合中的文档: db.collection.update() db.collection.updateOne() New in version 3.2 db.collection.updateMany() New in version 3.2 db.collection.replaceOne() New in version 3. 你可以通过指定criteria或者filter来指定你想更新的文档: update函数执行

MongoDB 数据分发

在MongoDB(版本 3.2.9)中,数据的分发是指将collection的数据拆分成块(chunk),分布到不同的分片(shard)上,数据分发主要有2种方式:基于数据块(chunk)数量的均衡分发和基于片键范围(range)的定向分发.MongoDB内置均衡器(balancer),用于拆分块和移动块,自动实现数据块在不同shard上的均匀分布.balancer只保证每个shard上的chunk数量大致相同,不保证每个shard上的doc数量大致相同. 一,数据按照chunk数量进行均衡分发

MongoDB 搭建分片集群

在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(Sharded Clustered)的服务器分为三中类型:Router(mongos),Config Server 和 Shard(Replica Set 或 Standalone mongod).使用分片集群,不需要使用强大的计算机,就能存储更多的数据,处理更大的负载.分布式数据库系统的设计目的是:

MongoDB 维护Replica Set

在每个MongoDB(版本 3.2.9) Instance中,都有一个本地数据库(local),用于存储 Replication 进程的信息和本地数据.local 数据库的特性是:位于local数据库中的数据和集合不会被 Replication 进程复制到其他MongoDB instance上.如果实例上有些collection 和 data不计划被复制到其他MongoDB Instance,可以将这些collection 和 data 存储在local 数据库中. MongoDB shell提