如何在shell下使用JavaScript和Mongodb交互?

Mongodb的客户端支持 作为一款非常成熟NoSQL数据库,Mongdb对各种编程语言的支持已经非常完善了,目前已经支持各大主流编程语言包括: 1,mongo shell 2,python 3,java 4,c# 5,node.js 6,c++ 在这些语言里面,最简单,最轻巧的就莫属mongo shell了,无须任何其他的依赖环境,只需要一个mongo客户端,就可以连接本地的,远程的各个mongo库了,这非常像各个数据库的界面工具,如Navicat,Sql Plus等, 交互式能力非常强,想要什么数据,很快就能直接查出来,当然想要运用的更灵活,肯定是嵌入到编程语言里面了。 Mongodb包结构介绍 1,mongo核心脚本进程 mongo ->mongo的交互式shell mongod -> 数据库进程 mongos -> 查询路由控制器 2,二进制导入导出工具 mongodump ->创建bson文件导出来自mongod实例 mongorestore ->恢复上面导出的备份文件 bsondump ->转换bson文件成json文件 mongooplog ->记录一些正常副本的流式log 3,文本导入导出工具 mongoimport -> 导入来自csv,json,tsv的数据 mongoexport -> 导出mongo数据到csv,json,tsv格式的文件里 4,诊断工具 mongostat ->能够查看当前运行实例的副本,实例,集合,coll状态 mongotop -> 能够查看当前实例的读写比例和花费时间 mongosniff ->提供一个近实时的数据状态跟踪明细 mongoperf ->能够查看当前实例磁盘IO的性能 如何以js方式操作mongo表数据? 假如我们现在有一个需求,读取某个mongo库的一个表,然后清洗相关字段,再输入到一个本地文件里面,如何用js完成,封装的逻辑? 定义的js如下:

Java代码

  1. //查询一个表实例所有数据,得到一个游标
  2. var cursor=db.collection1.table1.find();
  3. cursor.forEach(
  4. function(doc) {
  5. var split="\1";//分隔符
  6. var anyCpyNo=doc.anyCpyNo+"";//主键
  7. var cpyName=doc.cpyName+"";//企业名称
  8. var logoUrl=doc.cpyOtherResource+""!='undefined'?doc.cpyOtherResource.logoUrl:"";//图片的url
  9. var provinceCode=doc.provinceCode+"";//省份编码
  10. var cityCode=doc.cityCode+"";//城市编码
  11. var modifyTime=new Date(doc.modifyTime).getTime();//更新时间
  12. var cpyNatureCode=doc.cpyNatureCode+"";//企业性质+双引号,转成字符串
  13. var cplen=cpyNatureCode.length
  14. if(cpyNatureCode!='undefined'&& cplen > 2 ){
  15. cpyNatureCode=cpyNatureCode+"#"+cpyNatureCode.substr(0,2)+"00";
  16. }
  17. var foundDate=new Date(doc.foundDate).getTime();//成立时间
  18. var subIndustryCode=doc.subIndustryCode;//行业标准
  19. if(subIndustryCode!='undefined' && subIndustryCode+"".length > 2){
  20. subIndustryCode=subIndustryCode.substr(0,2)+"00";
  21. }
  22. var legalPerson=doc.legalPerson;//法定代表人
  23. if(legalPerson==='undefined'){
  24. legalPerson=doc.manager;
  25. }
  26. var loc=doc.location+""//地址
  27. if(loc==='undefined'){
  28. loc=doc.businessPlace;
  29. }
  30. var regCode=doc.regCode+"";//工商注册号
  31. var orgCode=doc.orgCode+"";//组织机构代码
  32. var regCapital=doc.regCapital+""!='undefined'?doc.regCapital.amount+""!='undefined'?doc.regCapital.amount:"":"";//注册资金
  33. var taxRegCode=doc.taxRegCode+"";//税务登记号码
  34. var r=anyCpyNo//主键
  35. +split+cpyName//公司名
  36. +split+logoUrl//图片url
  37. +split+provinceCode//省份编码
  38. +split+cityCode//城市编码
  39. +split+modifyTime//更新时间
  40. +split+cpyNatureCode//企业性质
  41. +split+foundDate//成立时间
  42. +split+subIndustryCode//二级行业标准的顶级类目
  43. +split+legalPerson//法定代表人
  44. +split+loc//地址
  45. +split+regCode//工商注册号
  46. +split+orgCode//组织机构代码
  47. +split+regCapital//注册资金
  48. +split+taxRegCode;//税务登记号码
  49. r=r.replace(/\r/gi, "");//Js正则去掉换行字符
  50. r=r.replace(/\n/gi, "");//Js正则去掉换行字符
  51. r=r.replace(/undefined/gi,"");//Js正则去掉未定义的语句
  52. print(r);//输入拼接的整行内容
  53. }
  54. );

如何在Centos中向mongos提交执行js?

Java代码

  1. mongo --quiet ip:host/dbname < test.js >> data
  2. //--quiet执行静默模式,去掉系统打印信息
  3. //ip mongo服务所在机的ip地址
  4. //host mogo服务对外提供的访问端口
  5. //dbname 是指要链接的数据库名字
  6. // test.js 是我们要执行的js文件
  7. // data 是我们输出的内容写入data文件里面

一些Mongo的与SQL对应的操作语句

Java代码

  1. 操作
  2. SQ语法
  3. Mongodb语法
  4. 建表
  5. CREATE TABLE users (id MEDIUM INT NOTNULL AUTO_INCREMENT,user_idVarchar(30),ageNumber,statuschar(1),PRIMARYKEY(id))
  6. db.users.insert({user_id:"abc123",age:55,status:"A"})
  7. users集合可以不存在,在插入第一条时会创建,当然也可以
  8. 提前创建,执行语句:db.createCollection("users")
  9. 新增字段
  10. ALTER TABLE users ADD join_date DATETIME
  11. db.users.update({},{$set:{join_date:newDate()}},{multi:true})
  12. 删除字段
  13. ALTER TABLE users DROP COLUMN join_date
  14. db.users.update({},{$unset:{join_date:""}},{multi:true})
  15. 建立索引
  16. CREATE INDEX idx_user_id_asc ON users(user_id)
  17. db.users.createIndex({user_id:1})
  18. 建立索引指定排序
  19. CREATE INDEX idx_user_id_asc_age_desc ON users(user_id,ageDESC)
  20. db.users.createIndex({user_id:1,age:-1})
  21. 删除一个表
  22. DROP TABLE users
  23. db.users.drop()
  24. 插入数据
  25. INSERTINT Ousers (user_id,age,status) VALUES ("bcd001",45,"A")
  26. db.users.insert({user_id:"bcd001",age:45,status:"A"})
  27. 查询1
  28. SELECT * FROM users
  29. db.users.find()
  30. 查询2
  31. SELECT id,user_id,status FROM users
  32. db.users.find({},{user_id:1,status:1})
  33. 查询3
  34. SELECT user_id,status FROM users
  35. db.users.find({},{user_id:1,status:1,_id:0})
  36. 查询4
  37. SELECT * FROM users WHERE status = "A"
  38. db.users.find({status:"A"})
  39. 查询5
  40. SELECT user_id,status FROM users WHERE status = "A"
  41. db.users.find({status:"A"},{user_id:1,status:1,_id:0})
  42. 查询6
  43. SELECT * FROM users WHERE status != "A"
  44. db.users.find({status:{$ne:"A"}})
  45. 查询7
  46. SELECT * FROM users WHERE status="A" AND age=50
  47. db.users.find({status:"A",age:50})
  48. 查询8
  49. SELECT * FROM users WHERE status="A" OR age = 50
  50. db.users.find({$or:[{status:"A"},{age:50}]})
  51. 查询9
  52. SELECT * FROM users WHERE age > 25
  53. db.users.find( {age:{$gt:25}} )
  54. 查询10
  55. SELECT * FROM users WHERE age < 25
  56. db.users.find({age:{$lt:25}})
  57. 查询11
  58. SELECT * FROM users WHERE age > 25 AND age <= 50
  59. db.users.find({age:{$gt:25,$lte:50}})
  60. 查询12
  61. SELECT * FROM users WHERE user_id like "%bc%"
  62. db.users.find({user_id:/bc/})
  63. 查询13
  64. SELECT * FROM users WHERE user_id like "bc%"
  65. db.users.find({user_id:/^bc/})
  66. 查询14
  67. SELECT * FROM users WHERE status="A" ORDER BY user_id ASC
  68. db.users.find({status:"A"}).sort({user_id:1})
  69. 查询15
  70. SELECT * FROM users WHERE status="A" ORDERBY user_id DESC
  71. db.users.find({status:"A"}).sort({user_id:-1})
  72. 查询16
  73. SELECT COUNT(*) FROM users
  74. db.users.count() 或者
  75. db.users.find().count()
  76. 查询17
  77. SELECT COUNT (user_id) FROM users
  78. db.users.count({user_id:{$exists:true}})
  79. db.users.find({user_id:{$exists:true}}).count()
  80. 查询18
  81. SELECT COUNT(*) FROM users WHERE age>30
  82. db.users.count({age:{$gt:30}}) 或者
  83. db.users.find({age:{$gt:30}}).count()
  84. 查询19
  85. SELECTDISTINCT(status) FROMusers
  86. db.users.distinct("status")
  87. 查询20
  88. SELECT * FROM users LIMIT 1
  89. db.users.findOne()
  90. db.users.find().limit(1)
  91. 查询21
  92. SELECT * FROM users LIMIT 5 , 10
  93. db.users.find().limit(5).skip(10)
  94. 查询22
  95. EXPLAIN SELECT * FROM users WHERE status="A"
  96. db.users.find({status:"A"}).explain()
  97. 更新1
  98. UPDATE users SET status="C" WHERE age>25
  99. db.users.update({age:{$gt:25}},{$set:{status:"C"}},{multi:true})
  100. 更新2
  101. UPDATE users SET age=age+3 WHERE status="A"
  102. db.users.update({status:"A"},{$inc:{age:3}},{multi:true})
  103. 删除1
  104. DELETE FROM users WHERE status="D"
  105. db.users.remove({status:"D"})
  106. 删除2
  107. DELETE FROM users
  108. db.users.remove({})

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2015-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日常学python

情人节福利,手把手教你学会mysql语句操作

这是我的第八篇原创文章 上篇文章简单说了下数据库,并教了怎样安装mysql工具和可视化工具,不知道你现在安装好了没?那今天我们继续说mysql,今天说下mysq...

38314
来自专栏琯琯博客

MySQL 查询优化

23111
来自专栏与神兽党一起成长

修改MySQL varchar类型字段的排序规则

记录一个在工作中遇到的问题,也不算是问题,为的是找一种简便的方法批量修改数据表字段的排序规则,在MySQL中叫collation,常常和编码CHARACTER一...

2803
来自专栏沈唁志

谈谈在SQL语句中的优化技巧

1854
来自专栏决胜机器学习

优化页面访问速度(二) ——数据库优化

数据库优化,主要包括数据表设计、索引、sql语句、表拆分、数据库服务器架构等方向的优化。

1285
来自专栏ytkah

dedecms清空所有文章怎么操作?sql语句如何写?

  小C新建了一个站,确切的说是复制,出于seo考虑,决定清空所有文章,那么dedecms清空所有文章怎么操作?sql语句如何写呢?特别提醒:修改之前一定要先做...

3029
来自专栏禅林阆苑

mysql学习总结08 — 优化(设计层)-索引与分区分表

普通索引:(index) 对关键字没有要求,如果一个索引在多个字段提取关键字,称为复合索引

1K40
来自专栏机器学习算法与Python学习

SQL Server常用命令(平时不用别忘了)

SQL Server 2008 在Microsoft的数据平台上发布,可以组织管理任何数据。可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。可以对...

3017
来自专栏IT技术精选文摘

MySQL-性能优化-索引和查询优化

1281
来自专栏码云1024

sql 复习练习

4366

扫码关注云+社区

领取腾讯云代金券