MongoDB 1.0からのリリースヒストリーと MongoDB 3.6 の新機能紹介

# MongoDB Release History

[MongoDB勉強会 in 2017](https://techplay.jp/event/632672) の発表資料です。

MongoDBのリリースヒストリーを振り返って、1.0からリリース予定の3.6までを紹介します。


## バージョニングルール

- x.x.x: メジャー.マイナー.リビジョン
- マイナーが偶数だと安定版、奇数だと開発版

### Example

- 2.0.0 : Stable release. 安定版リリース。
- 2.0.1 : Revision. リビジョン。
- 2.1.0 : Development release *for testing only*. 開発版リリース。
- 2.2.0 : Stable release. 安定版リリース。2.1.xで開発での開発の成果物。


## Release History


| Version       | Release Date | Topics  | 世界の動向  |
| ------------- | ------------ | ---------------------------------------- | ---------------------------------------- |
| first commit  | 2007/10/20   | 2000行のコードが[コミット](https://github.com/mongodb/mongo/commit/e73188b5512c82290a4070af4afddac20d0b981e)される | 初代iPhoneが発表される |
| v1.0          | 2009/08/27   | **レプリケーション**, Capped Collection | |
| v1.2          | 2009/12/10   | Indexの改善, [JSON PrettyPrinter](https://jira.mongodb.org/browse/SERVER-199),  **Map/Reduce**, **fsync**  [リリースノート](https://docs.mongodb.com/manual/release-notes/1.2/) |                                          |
| v1.4          | 2010/03/25   | シャーディング alpha 3, クエリ言語追加( $elemMatch, $unset 他 ), **GeoIndex登場**,  [リリースノート](https://docs.mongodb.com/manual/release-notes/1.4/) | NoSQLがバズワード化                             |
| v1.6          | 2010/08/25   | **シャーディング登場**, **レプリカセット登場**, GridFS, [リリースノート](https://docs.mongodb.com/manual/release-notes/1.6/) | MongoDB JP立ち上がる                          |
| v1.8          | 2011/03/16   | ジャーナリングのサポート, レプリカセットの強化, GeoIndexが球体対応, Indexに Sparse, Covered 追加,  [リリースノート](https://docs.mongodb.com/manual/release-notes/1.8/) | |
| v2.0          | 2011/09/12   | 並列処理性の改善, レプリカセット・シャーディングの改善、シャーディングでの認証機能, タグレプリカ機能, Data-Center Awareness, [リリースノート](https://docs.mongodb.com/manual/release-notes/2.0/) | データセンター型へ, MMSリリース, CAのMongoDB記事         |
| v2.2          | 2012/08/29   | **DB Level Lock**, **Aggregation Framework**, タグシャーディング, TTL Collections, [リリースノート](https://docs.mongodb.com/manual/release-notes/2.2/) | 丸の内MongoDB勉強会始まる, gihyo.jpで「MongoDBでゆるふわDB体験」連載開始, MongoDB Casual Talks, MongoDB + fluentd |
| v2.4          | 2013/03/19   | 全文検索, ロール, JavaScript EngineがV8に, GeoJSON, ハッシュドシャードキー, [リリースノート](https://docs.mongodb.com/manual/release-notes/2.4/) | 2013/08/27 10genがMongoDB, Inc. に社名変更, 10月に$150Mの資金調達 |
| v2.6          | 2014/04/08   | Aggregation Pipelineの強化, 書き込み処理APIを根本変更, カスタムロール, セキュリティ機能,  [リリースノート](https://docs.mongodb.com/manual/release-notes/2.6/) | エンタープライズユースへ, fluentd + MongoDB + Elasticsearch + Kibana でログの可視化, 2014/06/24 MongoDB World 2014 (初のMongoDB World) |
| v3.0          | 2015/03/03   | **Pluggable Strage Engine** ( WiredTiger, MMAPv1 ), **Collection Level Lock**, **Document Level Lock** ( Only WiredTiger ),  [リリースノート](https://docs.mongodb.com/manual/release-notes/3.0/) | MMS強化, 2015年1月に$80Mを調達                   |
| v3.2          | 2015/12/08   | Document Validation, Partial Index, $lookup ( Aggregationでjoin ), ストレージエンジンの追加, JavaScript EngineがSpidermonkeyに, 全文検索にアラビア語、中国語、ペルシャ語、ウルドゥー語が追加, CRUD API追加,   [リリースノート](https://docs.mongodb.com/manual/release-notes/3.2/) | BI Connector, Ops Manager (旧MMS)         |
| v3.4          | 2016/11/29   | Aggregation ( $graphLookup, $facet ) , View, Sort by collation, Apache Spark Connector,  [リリースノート](https://docs.mongodb.com/manual/release-notes/3.4/) | Atlas, Compass, Multi-Datacenter Deployment |
| v3.6 upcoming | 2017/xx/xx   | Aggregationの改善, 配列を扱いやすくする機能改善 [リリースノート](https://docs.mongodb.com/master/release-notes/3.6/) |                                          |



https://docs.mongodb.com/manual/release-notes/



## MongoDB 3.0

[MongoDB 3.0 Announcement | MongoDB Blog | MongoDB](https://www.mongodb.com/blog/post/announcing-mongodb-30)

![mongodb_30](https://qiita-image-store.s3.amazonaws.com/0/32750/14ac2375-5711-6a7b-ec56-fe685a75884f.jpeg)


### Plugabble Storage Engine

- MMAPv1とWiredTigerをリリース

### Lock Level

- MMAPv1はCollection Level Lock
- WiredTigerはDocument Level Lock



## MongoDB 3.2

[MongoDB 3.2 Announcement | MongoDB Blog | MongoDB](https://www.mongodb.com/blog/post/announcing-mongodb-3-2)

![mongodb_32.png](https://qiita-image-store.s3.amazonaws.com/0/32750/cf02621e-b15a-ae90-8ce6-9c322b159b7a.png)

### Document Validation

```javascript
db.createCollection( "contacts",
   { validator: { $or:
      [
         { phone: { $type: "string" } },
         { email: { $regex: /@mongodb\.com$/ } },
         { status: { $in: [ "Unknown", "Incomplete" ] } }
      ]
   }
} )
```



### Patial Indexes

partialFilterでフィルタリングしたDocumentのみをIndexing可能に。

### $lookup

Aggregationでjoinっぽいことができる。

### New CRUD API

xxxOne()とxxxMany()になって数が増えた。deleteMany(), deleteOne()とか。





## MongoDB 3.4

![mongodb_34.jpg](https://qiita-image-store.s3.amazonaws.com/0/32750/b9a4b195-f3a3-5e96-a47e-bfcfbd631f7f.jpeg)


### Graph Computing

**$graphLookup**: コレクションに対して再帰的に検索を行います。

### Faceted Navigation

**$facet**: サブクエリのパイプライン向けオペレータ。入力されたドキュメントに対して複数のパイプライン処理を行い、これらのパイプラインの結果を含んだドキュメントを出力します。読み方はファセット。

### Databese Views

読み取り専用のいわゆるView。

### Decimal data type

decimal128フォーマットのサポート。34桁までの仮数および-6143から+6144までの指数の範囲をサポートします。

### MongoDB Atlas

MongoDB as a Serviceなクラウドサービス。

![mongodb_atlas.png](https://qiita-image-store.s3.amazonaws.com/0/32750/6761ee0d-c7be-c810-afa3-f9cbf71deac8.png)


### MongoDB Compass

MongoDBのGUIツール。GUIでCRUDできる。

![mongodb_compass.png](https://qiita-image-store.s3.amazonaws.com/0/32750/d1bf44cc-9877-153c-83e7-7fec9c1d6a9c.png)


## MongoDB 3.6 ( upcoming )

![mongodb_36.gif](https://qiita-image-store.s3.amazonaws.com/0/32750/15d428cd-699d-32b0-c0d5-824a02a2e91c.gif)

[Release Notes for MongoDB 3.6 (Development Series 3.5.x) — MongoDB Manual 3.6](https://docs.mongodb.com/master/release-notes/3.6/)

### Security Enhancements

- MongoDB 3.6からバイナリ配布のMongoDBのmongodとmongosは、デフォルトではlocalhostをbindするようになりました。localhost以外からアクセスする場合は、 `--bind_ip` で指定してください。

### Aggregation

- New Aggregation Operators
  - [$arrayToObject](https://docs.mongodb.com/master/reference/operator/aggregation/arrayToObject/#exp._S_arrayToObject) : 配列をいい感じにObjectにしてくれる。
  - [$objectToArray](https://docs.mongodb.com/master/reference/operator/aggregation/objectToArray/#exp._S_objectToArray)
  - [$mergeObjects](https://docs.mongodb.com/master/reference/operator/aggregation/mergeObjects/#exp._S_mergeObjects)
- New Aggregation Variable
  - [REMOVE](https://docs.mongodb.com/master/reference/aggregation-variables/#variable.REMOVE) という条件に合うfieldを結果に含めなくする変数が使えるようになった。
- New hint Option
  - hint() で使うindexを指定できる。
- Support for Time Zones
  - [$dateToString](https://docs.mongodb.com/master/reference/operator/aggregation/dateToString/#exp._S_dateToString) で %z, %Z を使ってoffsetでtimezoneを指定できるようになった。

### Array Update Operator Enhancements

- [`findAndModify`](https://docs.mongodb.com/master/reference/command/findAndModify/#dbcmd.findAndModify) や [`update`](https://docs.mongodb.com/master/reference/command/update/#dbcmd.update) , その他いくつかのMethods ( update(), bulkWrite() など ) で、[arrayFilters](https://docs.mongodb.com/master/reference/command/findAndModify/#findandmodify-command-arrayfilters) が使えるようになりました。
- Multi-Element Array Updates: 配列の全ての要素を指す $ [ ] と arrayFilters で使える $[ <identifier> ] をサポート。 
  - https://docs.mongodb.com/master/reference/operator/update/positional-all/#up._S_[]
  - https://docs.mongodb.com/master/reference/operator/update/positional-filtered/#positional-update-arrayfilters


- Negative Array Index Position for push
  - [`$position`](https://docs.mongodb.com/master/reference/operator/update/position/#up._S_position) modifier でマイナスのindexが使えるようになりました。マイナスの場合は配列の最後から数えた要素を指します。

### Genelral Enhancements

- [`ShardingTaskExecutorPoolMaxConnecting`](https://docs.mongodb.com/master/reference/parameters/#param.ShardingTaskExecutorPoolMaxConnecting) が追加された。
- [`opensslCipherConfig`](https://docs.mongodb.com/master/reference/parameters/#param.opensslCipherConfig) が追加された。
- zlib が —networkMessageCompressors でサポートされた。
- nested document を含む fields へのクエリーへのIndexがサポートされた。
- Diagnostics Capture (also known as FTDC) が mongos でサポートされた。以前はmongodのみだった。参考: [Diagnostic Parameters](https://docs.mongodb.com/master/reference/parameters/#param-ftdc)






## MongoDB 開発マイルストーン

JIRAでリリース日を明記しなくなった？

https://jira.mongodb.org/projects/SERVER?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page

![mongodb_jira.png](https://qiita-image-store.s3.amazonaws.com/0/32750/8b29151d-21cc-3ce6-de8b-1cc7e46a89e1.png)


## Indexの進化

![mongodb_indexes.png](https://qiita-image-store.s3.amazonaws.com/0/32750/38030c21-9b6c-4de4-40ff-67595978b61a.png)



[Indexes — MongoDB Manual 3.4](https://docs.mongodb.com/manual/indexes/)



| Indexes            | Version | 概要                                       |
| ------------------ | ------- | ---------------------------------------- |
| Multikey Index     | v1.0    | 複合インデックス                                 |
| Geospatial Index   | v1.4    | 地理空間インデックス                               |
| Sparse Indexes     | v1.8    | インデックス対象のfieldがない場合、インデックスしない            |
| Covered Queries    | v1.8    | インデックス対象fieldのみのクエリーの場合に、Collectionを探索せずにダイレクトに結果を返す |
| TTL Indexes        | v2.2    | Time-To-Live. 期間を指定して作成することで、期間を過ぎると自動的にデータを削除する       |
| Text Indexes       | v2.4    | 全文検索。v3.4の時点では日本語未対応。                    |
| Index Intersection | v2.6    | 1つのクエリーで2つのインデックスをMongoDB側でうまく組み合わせて使ってくれる |
| Partial Indexes    | v3.2    | 条件を設定することで、インデックスの作成対象をコレクション内の全ドキュメントではなく、一部のドキュメントに限定する |





## Storage Engine

MongoDB 3.0 から選択可能に。

The [storage engine](https://docs.mongodb.com/manual/reference/glossary/#term-storage-engine) is the component of the database that is responsible for managing how data is stored, both in memory and on disk. MongoDB supports multiple storage engines, as different engines perform better for specific workloads. Choosing the appropriate storage engine for your use case can significantly impact the performance of your applications.



| Storage Engine | 概要                                       |
| -------------- | ---------------------------------------- |
| WiredTiger     | v3.2からデフォルトに。Enterprise版ではEncryptionをサポート。 |
| MMAPv1         | v3.0までデフォルトで使われていたEngine。                |
| In-Memory      | Enterprise版で使える。                         |





## Lock Level の変化

| Lock Level | Version | Storage Engine |
| ---------- | ------- | -------------- |
| Global     | ~ v2.0  | -              |
| DB         | v2.2    | -              |
| Collection | v3.0    | MMAPv1         |
| Document   | v3.0    | WiredTiger     |





## MongoDB, Inc. 資金調達の歴史

| Date      | Amount / Round   | Lead Investor              |
| --------- | ---------------- | -------------------------- |
| Jul, 2008 | $1.5M / Series A | Union Square Ventures      |
| Nov, 2009 | $3.4M / Series B | Flybridge Capital Partners |
| Dec, 2010 | $6.5M / Series C | Sequoia Capital            |
| Sep, 2011 | $20M / Series D  | Sequoia Capital            |
| May, 2012 | $42M / Series E  | New Enterprise Associates  |
| Oct, 2013 | $150M / Series E | T. Rowe Price              |
| Jan, 2015 | $80M / Series F  | -                          |
| Aug, 2017 | IPO?             | -                          |



[MongoDB | crunchbase](https://www.crunchbase.com/organization/mongodb-inc#/entity)





## 最新動向

| 日付         | ニュース                                     |
| ---------- | ---------------------------------------- |
| 2017/06/20 | [Recap of MongoDB World 2017](https://www.mongodb.com/blog/post/mongodb-world-2017-recap) |
| 2017/06/21 | [MongoDBがバックエンドサービスStitchを開始、AtlasはAzureとGCPに対応、そして新しいBIツールも発表](http://jp.techcrunch.com/2017/06/21/20170620mongodb-launches-stitch-a-new-backend-as-a-service-and-brings-atlas-to-azure-and-google/) |
| 2017/06/21 | [MongoDB、データベース内のデータをマウス操作で簡単にグラフ化できる「MongoDB Charts」発表。MongoDB World 2017 － Publickey](http://www.publickey1.jp/blog/17/mongodbmongodb_chartsmongodb_world_2017.html) |
| 2017/08/16 | [NoSQLデータベースのMongoDBが非公開でIPOを申請](http://jp.techcrunch.com/2017/08/16/20170815database-provider-mongodb-has-filed-confidentially-for-ipo/) |


## MongoDB World 2017

2017/06/20 に開催。

![mongodb_world2017.jpg](https://qiita-image-store.s3.amazonaws.com/0/32750/2a860d50-213d-12a6-e057-b49e49d76115.jpeg)

ケリー・マクゴニガルの双子の妹であるジェイン・マクゴニガルも登壇。

![mongodb_world2017_keynote.png](https://qiita-image-store.s3.amazonaws.com/0/32750/b100acba-fa13-ae45-f76e-54c05087231a.png)



## MongoDB Charts (coming soon)

MongoDB Chartsは、MongoDBに統合されたツール。「とてもシンプルに、ドキュメントセントリックで美しいチャートを作るためのツールだ。MongoDBに保存されているどんな統計的データも視覚化できる」（同社CTO兼共同創業者 Eliot Horowitz氏。

MongoDB 3.6 と一緒にリリースされる予定だそうです。

![mongodb_chart_01.gif](https://qiita-image-store.s3.amazonaws.com/0/32750/424b68b0-c095-63ee-bcf2-4770c8b5a4cd.gif)

![mongodb_chart_02.gif](https://qiita-image-store.s3.amazonaws.com/0/32750/06be829d-a7e1-5459-d778-8ede7a2f5c07.gif)


## リリースノート翻訳

- [第2回　MongoDB 2.2の新機能：MongoDBでゆるふわDB体験｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/mongodb/0002)

- [第8回　リリース間近！ MongoDB 2.4の新機能：MongoDBでゆるふわDB体験｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/mongodb/0008)
- [まとめ！MongoDB 2.6のリリースノート翻訳と所感 - Qiita](http://qiita.com/syokenz/items/a0be8a8bc8b79d471ccf)
- [MongoDB 3.0 ( 2.8rc ) リリースノート翻訳 - Qiita](http://qiita.com/syokenz/items/38c61d828779d88a991d)
- [MongoDB 3.2の新機能を先取りチェック - Shoken Startup Blog](http://shoken.hatenablog.com/entry/2015/07/15/152012)
- [MongoDB 3.2 新機能アナウンスの説明 - Qiita](http://qiita.com/fetaro/items/907f4a8791ffb24df9bb)
- [MongoDB 3.4 New Features](https://bulbulpaul.com/blog/posts/2016/11/mongo-3.4/)
- [MongoDB 3.4 Release Notes 翻訳 - Qiita](http://qiita.com/kabao/items/19c590d99e724efcf73b)






## 参考資料

- [MongoDB の歴史（MongoDB 2.0 まで） #mongodbjp - 今日も適当ダイアリー](http://blog.madapaja.net/entry/2011/09/14/180900)
- [MongoDBでゆるふわDB体験：連載｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/mongodb)
- [MongoDB 3.2 で追加された $lookup ステージを使ってみる - Qiita](http://qiita.com/Mura-Mi/items/4374409edfc5ddc05efe)
- [(レポート) MongoDB勉強会：MongoDB v3.4新機能と遅いときの切り分け方法 ｜ Developers.IO](http://dev.classmethod.jp/server-side/db/mongodb-learning-34/)
- [MongoDB最新動向 - 日々の記録 別館](http://d.hatena.ne.jp/nuko_yokohama/20160727/1469620820)  MongoDB 3.2 の話
- [MongoDBのGUI CRUDツール：MongoDB Compassを使ってみた ｜ Developers.IO](http://dev.classmethod.jp/server-side/db/introducing-mongodb-compass/)
- [MongoDB の Partial Indexes を試してみた ｜ Developers.IO](http://dev.classmethod.jp/server-side/db/mongodb-partial-indexes/)
- [B TreeとB+ Treeの違い - Carpe Diem](http://christina04.hatenablog.com/entry/2017/05/17/190000)
- [MongoDBのインデックス２ - Carpe Diem](http://christina04.hatenablog.com/entry/2015/03/31/215349)






## MongoDB Download Links

### JIRA

- [JIRA: System Dashboard - MongoDB](https://jira.mongodb.org/secure/Dashboard.jspa)

### Manual Documents

- [The MongoDB 3.4 Manual — MongoDB Manual 3.4](https://docs.mongodb.com/manual/)
- [Indexes — MongoDB Manual 3.4](https://docs.mongodb.com/manual/indexes/)
- [Storage Engines — MongoDB Manual 3.4](https://docs.mongodb.com/manual/core/storage-engines/)
- [The MongoDB 3.6 Dev Series Manual — MongoDB Manual 3.6](https://docs.mongodb.com/master/)

### Download

- https://www.mongodb.com/download-center#community
- https://www.mongodb.org/dl/osx
- https://www.mongodb.org/dl/linux