工欲善其事,必先利其器,我们在使用数据库时,通常需要各种工具的支持来提高效率;很多新用户在刚接触 MongoDB 时,遇到的问题是『不知道有哪些现成的工具可以使用』,本系列文章将主要介绍 MongoDB 生态在工具、driver、可视化管理等方面的支持情况。

  • MongoDB 生态 - 可视化管理工具
  • MongoDB 生态 - 客户端 Driver 支持
  • MongoDB 生态 - 官方命令行工具

本文主要介绍社区里贡献的贡献的一些开源工具,这些都是从 MongoDB tools 里精选的github start比较多的开源项目。

shell 提升工具 mongo-hacker

mongo-hacker 主要是通过 ~/.mongorc.js 文件给 mongo shell 实现额外的扩展功能,比如配色输出、扩展一些API、简化aggregation语法等,提升了mongo shell的可读性、易用性,不过由于长时间未更新,部分功能在最新的版本上已经不可用了,经过测试,我最关注的配色输出是没问题的。

schema分析工具 variety

variety 是一款 MongoDB 的 schema 分析工具。

比如针对如下 users 集合

db.users.insert({name: "Tom", bio: "A nice guy.", pets: ["monkey", "fish"], someWeirdLegacyKey: "I like Ike!"});
db.users.insert({name: "Dick", bio: "I swordfight.", birthday: new Date("1974/03/14")});
db.users.insert({name: "Harry", pets: "egret", birthday: new Date("1984/03/14")});
db.users.insert({name: "Geneviève", bio: "Ça va?"});
db.users.insert({name: "Jim", someBinData: new BinData(2,"1234")});$ mongo test --eval "var collection = 'users'" variety.js
+------------------------------------------------------------------+
| key                | types              | occurrences | percents |
| ------------------ | ------------       | ----------- | -------- |
| _id                | ObjectId           |           5 |    100.0 |
| name               | String             |           5 |    100.0 |
| bio                | String             |           3 |     60.0 |
| birthday           | Date               |           2 |     40.0 |
| pets               | Array(1),String(1) |           2 |     40.0 |
| someBinData        | BinData-old        |           1 |     20.0 |
| someWeirdLegacyKey | String             |           1 |     20.0 |
+------------------------------------------------------------------+

Restful接口 Eve

eve 是基于python开发的开源 REST API 框架,借助它可以快速方便的开发Web服务,eve后端的数据库支持 MongoDB 以及关系型数据库。

$ curl -i http://127.0.0.1:5000/people/obama
HTTP/1.0 200 OK
Etag: 28995829ee85d69c4c18d597a0f68ae606a266cc
Last-Modified: Wed, 21 Nov 2012 16:04:56 GMT
Cache-Control: 'max-age=10,must-revalidate'
Expires: 10
...
{"firstname": "barack","lastname": "obama","_id": "50acfba938345b0978fccad7""updated": "Wed, 21 Nov 2012 16:04:56 GMT","created": "Wed, 21 Nov 2012 16:04:56 GMT","_links": {"self": {"href": "people/50acfba938345b0978fccad7", "title": "person"},"parent": {"href": "/", "title": "home"},"collection": {"href": "people", "title": "people"}}
}

与 eve 功能类似的工具还有 Kule、RESTHeart、Crest。

索引优化工具 dex

dex 是 MongoDB 开发的索引优化工具,能根据查询日志来优化索引,但比较遗憾的是这个工具只支持2.6及以下的MongoDB; 这个项目做的工作非常有意义,有兴趣的同学可以fork这个项目,增加对最新版本 MongoDB 的支持。

对象关系映射 mongoengine

mongoengine 能很方便的实现 python 对象到 MongoDB 文档之间的映射。

from mongoengine import *
connect('mydb')''' Blog基类
class BlogPost(Document):title = StringField(required=True, max_length=200)posted = DateTimeField(default=datetime.datetime.utcnow)tags = ListField(StringField(max_length=50))meta = {'allow_inheritance': True}''' 文本Blog派生类
class TextPost(BlogPost):content = StringField(required=True)''' 链接Blog派生类
class LinkPost(BlogPost):url = StringField(required=True)# Create a text-based post
>>> post1 = TextPost(title='Using MongoEngine', content='See the tutorial')
>>> post1.tags = ['mongodb', 'mongoengine']
>>> post1.save()# Create a link-based post
>>> post2 = LinkPost(title='MongoEngine Docs', url='hmarr.com/mongoengine')
>>> post2.tags = ['mongoengine', 'documentation']
>>> post2.save()# Iterate over all posts using the BlogPost superclass
>>> for post in BlogPost.objects:
...     print '===', post.title, '==='
...     if isinstance(post, TextPost):
...         print post.content
...     elif isinstance(post, LinkPost):
...         print 'Link:', post.url
...     print
...# Count all blog posts and its subtypes
>>> BlogPost.objects.count()
2
>>> TextPost.objects.count()
1
>>> LinkPost.objects.count()
1

原文地址:https://yq.aliyun.com/articles/69195?spm=5176.100239.blogcont68925.22.or5UQG

其他语言也有类似的工具,例如

  • nodejs 版本的 mongoose
  • java 版本的 spring data mongodb
  • Ruby 版本的 MongoMapper、
  • PHP 版本的 doctrine-odm

MongoDB生态 - 社区开源工具篇相关推荐

  1. 控制开源工具,就控制了整个生态!一部技术寡头争霸传

      新智元推荐   来源:AI前线(ID:ai-front) 编辑:Natalie [导读]全球市值最高的五家公司--苹果 (Apple).亚马逊 (Amazon).Alphabet.微软 (Micr ...

  2. 【社区分享】玩转社区开源贡献,看这篇就够了!

    如何成为 TensorFlow 中文社区的 Contributor?蚂蚁集团技术专家唐源围绕4个方面,教你如何玩转 TensorFlow 社区开源贡献. 本文来自社区投稿与征集.作者唐源,现任蚂蚁集团 ...

  3. 那些适合日常使用的开源工具和应用(设计篇)

    2019独角兽企业重金招聘Python工程师标准>>> 本系列文章将针对办公.设计.娱乐.教育等日常使用场景,进行一些开源工具和应用的推荐,希望能对大家有所帮助.优秀的实在太多,篇幅 ...

  4. android 测试工具,Android开源项目第四篇:开发及测试工具篇

    本文为那些不错的Android开源项目第四篇--开发工具篇,**主要介绍Android开发工具和测试工具相关的开源项目**. Android开源项目系列汇总已完成,包括: 1.Buck faceboo ...

  5. 积极参与开源项目,促进.NET Core生态社区发展

    今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了,想起当时还是我在他们的github上提的issue: https://github.com/Baidu- ...

  6. https 慢_dba+开源工具:可视化分析MongoDB慢查询日志

    工具研发者介绍 贺春旸,凡普金科爱钱进DBA团队负责人,<MySQL管理之道:性能调优.高可用与监控>第一.二版作者,曾任职于中国移动飞信.安卓机锋网.致力于MariaDB.MongoDB ...

  7. 技术寡头争霸传之:控制开源工具,就控制了整个生态

    霍布斯的利维坦--当一个新的利维坦出现时,政治国家将会消亡 争夺云端--了解技术现状 在以弑君者为荣的山谷里,假如国王再也不能被杀死了会怎样? "你如何与一个不想赚钱的巨人公司竞争?&quo ...

  8. 云计算技术 — 云计算生态依靠开源社区进行构建

    目录 文章目录 目录 云计算生态依靠开源社区进行构建 健全标准 建立信任 云计算生态依靠开源社区进行构建 健全标准 云原生技术自 2015 年由 CNCF 下过定义以后,短短 5 年间发展迅速,已经演 ...

  9. .NET开源工具类库:Masuit.Tools

    [开源框架]| 通用工具类库 这是恰童鞋骚年的第223篇原创文章 本文介绍一个我的同事[懒得勤快](人称勤快哥,我们叫他骚哥)写的一个.NET开源工具类库项目,包含一些常用的操作类,大都是静态类,加密 ...

最新文章

  1. jdk1.8中接口可以写默认方法
  2. hibernate中的锁
  3. 找到字符串中所有字母异位词—leetcode438
  4. JAVA常见算法题(三十一)---冒泡排序
  5. 春节特惠活动┃一张纸一幅图,竟然提高了10倍的学习和工作效率!?
  6. 前端学习(2890):如何短时间内实现v-for 模板编译321
  7. 分布式为什么使用Redis
  8. 推动Windows的限制:进程和线程
  9. datagrid设置单元格边框_更改 DataGridView 控件中的边框和网格线样式 - Windows Forms .NET Framework | Microsoft Docs...
  10. ActionContext介绍(在Struts2中)
  11. 好用的开源房产管理系统测评(附源码)
  12. php 关闭call stack,Thinkphp Call Stack,PHP调用栈Call Stack的获取
  13. APP的原型制作流程
  14. 华为机试高频题目(Java实现)
  15. 《东京食尸鬼》观后感
  16. 台式计算机自动关机,电脑会自动关机是什么原因,台式电脑自动关机是什么原因...
  17. Unity Burst学习2
  18. JavaScipt设计模式初探-代理模式(一)
  19. java中13%(-3)_Java13版本特性【一文了解】
  20. health HEALTH_WARN;352 pgs degraded;352 pgs stuck unclean;352 pgs undersized;recovery 20/40 objects

热门文章

  1. 数据库中的候选码、主码、全码、外码、主属性
  2. 将字符串XX,SS以“,”符号进行区分并分别存储在数组中
  3. clion编译报错:Error: selected FPU does not support instruction -- `vstmdbeq r0!,{s16-s31}‘
  4. 保障4-0509任务打卡
  5. 换了新的工具–X31
  6. 大叔分几种类型_什么是大叔型男友?什么类型的女孩会喜欢大叔?
  7. BZOJ3155 Preprefix sum
  8. 基于Matlab使用 System 对象模拟惯性测量单元测量仿真(附源码)
  9. unity 从apk包中提取资源
  10. 计算机网络技术期末考试国开,最新最全国开(电大)《计算机网络技术-NET编程基础-1》考试试题及答案(小炒)...