设为首页 收藏本站
查看: 1372|回复: 0

[经验分享] Mongodb语法总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-9 09:57:37 | 显示全部楼层 |阅读模式
mongodb与mysql命令对比
mongodb语法

MongoDB对数据的操作很丰富,下面做一些举例说明,内容大部分来自官方文档,另外有部分为自己理解。

db.colls.find() //select * from colls

db.colls.find({‘last_name’: ‘Smith’});//select * from colls where last_name=’Smith’

db.colls.find( { x : 3, y : “foo” } );//select * from colls where x=3 and y=’foo’

db.colls.find({j: {$ne: 3}, k: {$gt: 10} });//select * from colls where j!=3 and k>10

db.colls.find({}, {a:0});//查询除a为0外的所有数据

db.colls.find({ “field” : { $gt: value } } );
db.colls.find({ “field” : { $gte: value } } );
也可对某一字段做范围查询
不等于查询用字符$ne
in查询用字符$in
db.colls.find({j:{$in: [2,4,6]}});

db.colls.find({j:{$nin: [2,4,6]}});

db.colls.find( { a : { $mod : [ 10 , 1 ] } } )// where a % 10 == 1

db.colls.find( { a: { $all: [ 2, 3 ] } } );//指定a满足数组中任意值时

db.colls.find( { a : { $size: 1 } } );//对对象的数量查询,此查询查询a的子对象数目为1的记录

db.colls.find( { a : { $exists : true } } ); // 存在a对象的数据
$type查询$type值为bsonhttp://bsonspec.org/数 据的类型值
db.colls.find( { a : { $type : 16 } } ); // 匹配a为int类型数据

db.colls.find( { name : /acme.*corp/i } );//类似于SQL中like

db.colls.find( { “author.name” : “joe” } );

db.colls.find( { name : { $not : /acme.*corp/i } } );
sort()排序
limit()对限制查询数据返回个数
skip()跳过某些数据
snapshot()快照保证没有重复数据返回或对象丢失

db.students.find({‘address.state’ : ‘CA’}).count();//效率较高
group()对查询结果分组和SQL中group by函数类似
shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。
1、Help查看命令提示
  • > help  
  • > db.help();  
  • > db.yourColl.help();  
  • > db.youColl.find().help();  
  • > rs.help();  

当创建一个集合(table)的时候会自动创建当前数据库
4、删除当前使用数据库
  • > db.dropDatabase();  

将指定机器上的数据库的数据克隆到当前数据库
将本机的mydb的数据复制到temp数据库中
8、查看当前使用的数据库
  • > db.getName();  
  • > db;  

9、显示当前db状态
  • > db.stats();  

11、查看当前db的链接机器地址
  • > db.getMongo();  

1、创建一个聚集集合(table)
  • > db.createCollection(“collName”, {size: 20, capped: 5, max: 100});  

3、得到当前db的所有聚集集合
  • > db.getCollectionNames();  

? 用户相关
添加用户、设置密码、是否只读
3、显示当前所有用户
  • > show users;  

? 其他
2、清除错误记录
  • > db.resetError();   

三、Collection聚集集合操作
1、查看帮助
  • > db.yourColl.help();  

3、查看数据空间大小
  • > db.userInfo.dataSize();  

5、得到当前聚集的状态
> db.userInfo.stats();
7、聚集集合储存空间大小
> db.userInfo.storageSize();
9、聚集集合重命名
> db.userInfo.renameCollection("users");
10、删除当前聚集集合
> db.userInfo.drop();
1、查询所有记录
> db.userInfo.find();
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
2、查询去掉后的当前聚集集合中的某列的重复数据
> db.userInfo.distinct("name");
相当于:select distict name from userInfo;
相当于:select * from userInfo where age = 22;
相当于:select * from userInfo where age > 22;
相当于:select * from userInfo where age < 22;
相当于:select * from userInfo where age >= 25;
8、查询age >= 23 并且 age <= 26
> db.userInfo.find({age: {$gte: 23, $lte: 26}});
相当于:select * from userInfo where name like ‘%mongo%’;
select * from userInfo where name like ‘mongo%’;
相当于:select name, age from userInfo;
12、查询指定列name、age数据, age > 25
> db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
13、按照年龄排序
降序:
> db.userInfo.find().sort({age: -1});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
相当于:select top 5 * from userInfo;
相当于:select * from userInfo where id not in ( select top 10 * from userInfo );
可用于分页,limit是pageSize,skip是第几页*pageSize
相当于:select * from userInfo where age = 22 or age = 25;
相当于:select top 1 * from userInfo;
> db.userInfo.find().limit(1);
相当于:select count(*) from userInfo where age >= 20;
相当于:select count(sex) from userInfo;
1、创建索引
> db.userInfo.ensureIndex({name: 1});> db.userInfo.ensureIndex({name: 1, ts: -1});
3、查看总索引记录大小
> db.userInfo.totalIndexSize();
5、删除指定索引
> db.users.dropIndex("name_1");
? 修改、添加、删除集合数据
添加的数据的数据列,没有固定,根据添加的数据为准
相当于:update users set name = ‘changeName’ where age = 25;
> db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
4、查询修改删除
[html] view plaincopy
  • > db.users.findAndModify({  
  • ... query: {age: {$gte: 25}},   
  • ... sort: {age: -1},   
  • ... update: {$set: {name: 'a2'}, $inc: {age: 2}},  
  • ... remove: true  
  • ... });  
  •    
  • > db.runCommand({ findandmodify : "users",   
  • ... query: {age: {$gte: 25}},   
  • ... sort: {age: -1},   
  • ... update: {$set: {name: 'a2'}, $inc: {age: 2}},  
  • ... remove: true  
  • ... });  

[/td][td]
<span]1、简单Hello World
  • > print("Hello World!");  

2、将一个对象转换成json
  • > tojson(new Object());  
  • > tojson(new Object('a'));  

这样就循环添加了30条数据,同样也可以省略括号的写法
  • > for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});  

4、find 游标查询
  • >var cursor = db.users.find();  
  • > while (cursor.hasNext()) {   
  • ... printjson(cursor.next());   
  • ... }  

同样可以省略{}号
forEach中必须传递一个函数来处理每条迭代的数据信息
取得下标索引为4的那条数据
那样我们也可以用循环显示数据
  • > for (var i = 0, len = c.length(); i < len; i++) printjson(c);  

用toArray方法将其转换为数组
只显示age <= 28的并且只显示age这列数据
  • > db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);  
  • > db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);  

9、forEach传递函数显示信息
  • > db.things.find({x:4}).forEach(function(x) {print(tojson(x));});  

那么关于mongodb的shell操作的讲解就先到这了,基本涵盖了mongodb最为常用的操作方法,那么下一节我们会讲述用java如何驱动mongodb,即所谓的CRUD。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-21877-1-1.html 上篇帖子: MongoDB下配置用户权限 下篇帖子: 用MongoDB取代RabbitMQ
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表