mongodb操作命令
连接mongodb:(mongo命令打开的是一个javascript shell。所以js语法在这里面都行得通)
mongo 192.168.18.xx:27088/ups -uusername -ppassword
mongo 192.168.6.4:27017/admin -u root -p 123456
帮助:
help
db.help()
db.mycoll.help()
切换或创建数据库:
use testdb
创建集合:
db.createCollection("mycollection") --看增加选项参数指定集合选项
用户等基本信息查询:
db.addUser('name','pwd') --增加或修改用户密码
db.system.users.find() --查看用户列表
db.auth('name','pwd') --用户认证
db.removeUser('name') --删除用户
show users --查看所有用户
show dbs --查看所有数据库
show collections --查看所有的collection
db.printCollectionStats() --查看各collection的状态
db.copyDatabase('mail_addr','mail_addr_tmp') --拷贝数据库
db.mail_addr.drop() --删除collection
db.dropDatabase() --删除当前的数据库
插入:
db.mycollection.insert({"a":"s","sd":2}) --“_id": 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性
或:db.mycollection.save({"a":"s","sd":2})
var data={"name":"limin", "age":22, "address":"shenzhen"}
db.mycollection.insert(data)
db.mycollection.find()
data.name="yyy"
db.mycollection.insert(data)
db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]}) --存储嵌套的对象
db.user_addr.save({'Uid':'yushunzhi@sohu.com','Al':['test-1@sohu.com','test-2@sohu.com']}) --存储数组对象
删除:
db.mycollection.remove({}) --删除mycollection中所有数据
db.mycollection.remove({"name":"eee"}) --删除满足条件的所有数据
更新:
db.mycollection.update({"name":"www"}, {"name":"eee"}) --update方法的第一个参数为“查找的条件”,第二个参数为“更新的值” 属于整体更新(但只更新一条)
db.mycollection.update({"name":"www"}, {$inc:{"age":10}}) --局部更新,age增加10
db.mycollection.update({"name":"www"}, {$set:{"age":10}}) --局部更新,age变更为10
db.mycollection.update({"name":"www"}, {"name":"eee"},true)
db.mycollection.update({"name":"www"}, {"name":"eee"},upsert=true) --upsert操作(将update的第三个参数设为true即可),更新时如果根据条件没有查到,就在数据库里面新增一条
db.mycollection.update({"age":22}, {$set:{"age":32}},upsert=true,multi=true) --批量更新(在update的第四个参数中设为true即可), 满足条件的都更新
查询:
db.mycollection.find() 或 db.mycollection.find({}) --查询所有
db.mycollection.find().pretty() -- 改变显示方式
db.mycollection.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } ) --仅返回指定字段item和qty, 不返回_id
db.mycollection.find({"age":22}) --查询age为22的
db.mycollection.findOne({"name":"www"}) --查出一条数据
db.mycollection.find({}).limit(2) --限制查询的数据条数
db.users.find().skip(3).limit(5) --从第3条(0开始的)记录开始,返回5条记录
$where查询:
db.testy.find({"$where":function(){return this.age==22}})
或:db.testy.find({"$where":"this.age==22"}) --采用$where子句查询在速度上较常规查询慢的多。因文档需要从BSON转换成javascript对象,然后通过"$where"的表达式来运行
关系查询:
"$gt", "$gte", "$lt", "$lte", "$ne", "没有特殊关键字" (>, >=, <, <=, !=, =):
db.mycollection.find({"age":{$lt:22}})
"无关键字“, "$or", "$in","$nin"(And,OR,In,NotIn):
db.mycollection.find({"age":22, "name":"www"}) --and
db.mycollection.find({$or:[{"name":"yyy"},{"age":10}]}) --or
db.mycollection.find({"age":{$in:[22, 10]}}) --in 并集
db.mycollection.find({"age":{$all:[22, 10]}}) --in 交集
db.mycollection.find({"name":/^w/}) --使用正则表达式
排序:
db.mycollection.find({}).sort({"age":-1}) --以年龄降序desc
db.mycollection.find({}).sort({"age":1}) --以年龄升序asc
子对象的查询:
db.foo.find({'address.city':'beijing'})
聚合查询:
db.mycollection.count({}) --mycollection中数据总条数
db.mycollection.count({"age":22}) --满足条件的数据条数
db.mycollection.distinct("age") --age值的不重复集合
分组group查询:
db.mycollection.group({
"key":{"age":true},
"initial":{"nihao":[]},
"$reduce":function(cur,prev){
prev.nihao.push(cur.name);
}
})
说明:
key:这个就是分组的key,我们这里是对年龄分组。
initial: 每组都分享一个”初始化函数“,特别注意:是每一组,比如这个的age=20的value的list分享一个initial函数,age=22同样也分享一个initial函数。(nihao、cur、prev是自定义的,name是待显示数据的key)
$reduce(或reduce): 这个函数的第一个参数是当前的文档对象,第二个参数是上一次function操作的累计对象,第一次为initial中的{”perosn“:[]}。有多少个文档, $reduce就会调用多少次。
db.mycollection.group({
"key":{"age":true},
"initial":{"nihao":[]},
"reduce":function(cur,prev){
prev.nihao.push(cur.name);
},
"finalize":function(prev){
prev.count=prev.nihao.length;
}
})
说明:
加上一个count属性标明每个分组中的数量
finalize:这是个函数,每一组文档执行完后,多会触发此方法,那么在每组集合里面加上count也就是它的活了。
db.mycollection.group({
"key":{"age":true},
"initial":{"nihao":[]},
"reduce":function(cur,prev){
prev.nihao.push(cur.name);
},
"finalize":function(prev){
prev.count=prev.nihao.length;
},
"condition":{"age":{$lt:25}}
})
说明:
condition:这个就是过滤条件。不满足条件的被过滤掉。
游标:
(类似延迟执行)
var cc=db.mycollection.find({}) --申明一个“查询结构”cc
cc.next() --需要的时候next读取一条
cc.forEach(function(x){print(x.age)}) --或通过for循环读取
游标枚举完了之后,游标销毁,在读取就没有数据了
例子:
var cursor = db.C.find() --定义游标
while(cursor.hasNext()){
var obj = cursor.next();
print(obj.a);
......
}
索引:
性能分析函数(explain):db.mycollection.find({}).explain()
主要字段解释:
cursor: 这里出现的是”BasicCursor",什么意思呢,就是说这里的查找采用的是“表扫描”,也就是顺序查找,很悲催啊。
nscanned: 这里是10w,也就是说数据库浏览了10w个文档,很恐怖吧,这样玩的话让人受不了啊。
n: 这里是1,也就是最终返回了1个文档。
millis: 这个就是我们最最最....关心的东西,总共耗时114毫秒。
db.mycollection.ensureIndex({"name":1}) --使用ensureIndex在name上建立了索引。1表示按照name进行升序,-1表示按照name进行降序
db.mycollection.ensureIndex({"name":1},{"unique":true}) --建立唯一索引,重复的键值自然就不能插入
db.mycollection.ensureIndex({"name":1, "age":1}) --组合索引
db.mycollection.find({}).getIndexes()
db.mycollection.getIndexKeys() --查mycollection集合的索引信息
db.mycollection.find({}).hint({"age":1}) --按自己的方案暴力执行
db.mycollection.dropIndexes("name") --删除索引
mongodb操作命令的更多相关文章
- mongoDB操作命令及mongoDB的helper
此项目已开源,开源地址是: http://mongodbhelper-csharp.googlecode.com/svn/trunk/ mongodb的helper using System; usi ...
- mongodb系列之---副本集配置与说明
在配置副本集之前,我们先来了解一些关于副本集的知识. 1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置 ...
- MongoDB的基本使用及java对MongoDB的基本增删改查
MongoDB的特点 MongoDB 是文档存储数据库,存储结构灵活 MongoDB 支持复杂查询操作.支持序列 MongoDB 采用C++开发,可以做分布式扩展 MongoDB 采用BSON格式存储 ...
- Centos 7.3 安装 Mongodb
通过yum 安装: yum install -y mongodb-server Mongodb操作命令: #启动 systemctl start mongod.service #关闭 systemct ...
- MongoDB基础教程(安装、操作、配置)
MongoDB 下载安装 简易安装 # redhat, centOS sudo yum install -y mongodb # debian, ubuntu sudo apt install -y ...
- MongoDB常用操作命令大全
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作.输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令 如:如果你想创建一个 ...
- MongoDB基本操作命令
由于工作需要,笔者这两天使用了一下MongoDB.真的很不习惯!但是确实好用,命令比mysql和sqlserver简单很多.在这里整理一些MongoDB的基本操作命令分享出来. 客户端的安装就不说了, ...
- MongoDB(1):常用操作命令大全
MongoDB常用操作命令大全(转) http://www.jb51.net/article/48217.htm 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操 ...
- MongoDB学习总结(二) —— 基本操作命令(增删改查)
上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...
随机推荐
- C#基本工具代码
1.下载Xlsx public static void TryToDisplayGeneratedFileXlsx(string writeFilePath, string fileName) { H ...
- bootstrap 笔记
导航条: div.navbar.navbar-default > ul.nav.navbar 无非两层: 父div: navbar {相对位置.最低高度50px.下部margin:20px.透明 ...
- Spring+SpringMvc+Mybatis框架集成搭建教程一(项目创建)
一.框架搭建环境 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Idea 15.04 二 ...
- vs2010 在64bits系统下编译
vs只有32bits的没有64bits. 本来程序没问题,后面一直报错 LIBCMTD.lib(close.obj) : error LNK2001 LNK2019 换了各种 MD/MT/MTD 都没 ...
- 修改iphone联系人头像
如何通过代码来修改iphone联系人头像 使用如下代码: UIImage *image=[UIImage imageNamed:@"star_full.png"]; NSData ...
- kettle系列-1.kettle源码获取与运行
第一次写博客,心里有点小激动,肯定有很多需要改进的地方,望海涵. kettle算是我相对较为深入研究过的开源软件了,也是我最喜欢的开源软件之一,它可以完成工作中很多体力劳动,在ETL数据抽取方面得到了 ...
- windows自带FTP开启后,浏览器打不开的问题
问题描述:最近需要安装一个FTP服务器,傻瓜式的下一步下一步之后,用IE登录却发现登录不上,总是显示连接中,查找了一下网上别人的回答,发现原来系统的FTP是由主动跟被动的区别的. 问题解决:在IE下, ...
- 比较典型的带case的group by语句
2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果 ...
- 解决SVN Upgrade working copy问题
解决SVN Upgrade working copy,无法上传到svn上的解决方案是SVN Upgrade working copy老有问题,而且还特别慢.还有种方法,将原来上传到svn的项目中有个. ...
- 实践:Backbone作前端,Django+Tastypie作后端的简单Web在线聊天室
一.界面设计: 二.数据模型设计 id 每个发言都有一个独立的id由tastypie自动生成 content 发言的内容 username 发言者 date 发言时间 三.前端制作 这里没有用到Bac ...