{"pageContext":{"index":6,"total":362,"name":"2019-06-16","items":[{"node":{"frontmatter":{"title":"2019开源数据库报告,mysql依然居首","publish":true,"cover":"https://scalegrid.io/blog/wp-content/uploads/2019/06/2019-Most-Popular-Open-Source-Databases-Used-Report-Pie-Chart-ScaleGrid.png","showCover":true,"date":"2019-06-15","category":"database","url":"https://scalegrid.io/blog/2019-open-source-database-report-top-databases-public-cloud-vs-on-premise-polyglot-persistence/","author":"scalegrid 摘译 Ka","translator":"","tags":["css"],"priority":1},"html":"<p>mongodb 从第二位降至第三位，postgres 从第三位升至第二位，不过两者之间相差不大，还有 AWS 的 DocumentDB 的影响。</p>\n<h3 id=\"商业数据库-oracle-第一sql-server-第二\"><a href=\"#%E5%95%86%E4%B8%9A%E6%95%B0%E6%8D%AE%E5%BA%93-oracle-%E7%AC%AC%E4%B8%80sql-server-%E7%AC%AC%E4%BA%8C\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>商业数据库 oracle 第一,SQL Server 第二</h3>\n<p><img src=\"https://scalegrid.io/blog/wp-content/uploads/2019/06/2019-Most-Popular-Commercial-Databases-Used-Report-Pie-Chart-ScaleGrid.png\"></p>\n<h3 id=\"部署方式上，本地数据库依然占据多数\"><a href=\"#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%B8%8A%EF%BC%8C%E6%9C%AC%E5%9C%B0%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BE%9D%E7%84%B6%E5%8D%A0%E6%8D%AE%E5%A4%9A%E6%95%B0\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>部署方式上，本地数据库依然占据多数</h3>\n<p><img src=\"https://scalegrid.io/blog/wp-content/uploads/2019/06/2019-Open-Source-Databases-Public-Cloud-vs-Private-Cloud-vs-On-Premise-Report-Pie-Chart.png\"></p>\n<h3 id=\"nosql-与-sql-的比率在缩小\"><a href=\"#nosql-%E4%B8%8E-sql-%E7%9A%84%E6%AF%94%E7%8E%87%E5%9C%A8%E7%BC%A9%E5%B0%8F\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>NoSQL 与 SQL 的比率在缩小</h3>\n<p><img src=\"https://scalegrid.io/blog/wp-content/uploads/2019/06/SQL-vs-NoSQL-Open-Source-Database-Popularity.png\"></p>"}},{"node":{"frontmatter":{"title":"八千星最潮的全栈技术项目-React,ApolloGraphQL,Node,Mongo,Typescript-背后开源的辛酸原因","publish":true,"cover":"https://camo.githubusercontent.com/36a9e9b260bb5a31cc975711963e0bb9ecdfe43a/68747470733a2f2f692e696d6775722e636f6d2f6a59623459514c2e676966","showCover":true,"date":"2019-06-14","category":"nodejs","url":"https://github.com/TrillCyborg/fullstack","author":"Jason Werner","translator":"","tags":["fullstack"],"priority":2},"html":"<p>最近很热火的话题，团队辛苦开发的项目，居然客户跳票收不到钱。作者只好自我安慰，至少现在有了一个很潮的全栈开发项目模板。</p>\n<p>React,ApolloGraphQL,Node,Mongo,Typescript 这技术组合，确实潮，马上收获星星无数。</p>\n<p>感谢这些人，祝他们招财进宝！</p>"}},{"node":{"frontmatter":{"title":"Promise 使用汇总","publish":true,"cover":"","showCover":true,"date":"2019-06-15","category":"nodejs","url":"https://v8.dev/features/promise-combinators","author":" Mathias Bynens","translator":"","tags":["javascript"],"priority":1},"html":"<h3 id=\"promiseall-es2015\"><a href=\"#promiseall-es2015\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Promise.all (ES2015)</h3>\n<p>返回所有结果的集合数组,如果有一项失败则短路报错。</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> promises <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/component-a.css'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/component-b.css'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/component-c.css'</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> styleResponses <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span>promises<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">enableStyles</span><span class=\"token punctuation\">(</span>styleResponses<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">renderNewUi</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">reason</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">displayError</span><span class=\"token punctuation\">(</span>reason<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"promiserace-es2015\"><a href=\"#promiserace-es2015\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Promise.race (ES2015)</h3>\n<p>第一个成功或失败的会作为最终成功或失败的结果，其他短路。</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">race</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>\n    <span class=\"token function\">performHeavyComputation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">rejectAfterTimeout</span><span class=\"token punctuation\">(</span><span class=\"token number\">2000</span><span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">renderResult</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">error</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">renderError</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"promiseallsettled-提议状态\"><a href=\"#promiseallsettled-%E6%8F%90%E8%AE%AE%E7%8A%B6%E6%80%81\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\">Promise.allSettled</a> (提议状态)</h3>\n<p>等待全部完成，无论每个是成功还是失败都不会短路。</p>\n<p>返回结果是原来的 Promise 数组，只不过更新了状态(.status)。由与这种处理方式，不会抛异常。</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> promises <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api-call-1'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api-call-2'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/api-call-3'</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Imagine some of these requests fail, and some succeed.</span>\n\n<span class=\"token keyword\">await</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">allSettled</span><span class=\"token punctuation\">(</span>promises<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// All API calls have finished (either failed or succeeded).</span>\n<span class=\"token function\">removeLoadingIndicator</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"promiseany-提议状态\"><a href=\"#promiseany-%E6%8F%90%E8%AE%AE%E7%8A%B6%E6%80%81\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Promise.any (提议状态)</h3>\n<p>任何一个成功了即短路返回此成功结果，仅当所有都失败了才抛异常。</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> promises <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/endpoint-a'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token string\">'a'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/endpoint-b'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token string\">'b'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">fetch</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/endpoint-c'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token string\">'c'</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> first <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Promise<span class=\"token punctuation\">.</span><span class=\"token function\">any</span><span class=\"token punctuation\">(</span>promises<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// Any of the promises was fulfilled.</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>first<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// → e.g. 'b'</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">error</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// All of the promises were rejected.</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"Render 适合创业者的托管云供应商","publish":true,"cover":"","showCover":true,"date":"2019-06-12","category":"devops","url":"https://www.infoq.cn/article/EJlZE7gr873afW4L_BM7","author":"Reda Hmeid 译者 张卫滨","translator":"","tags":["paas"],"priority":1},"html":"<p><a href=\"https://render.com/\">Render</a> 是一个新的 Web 和 App 托管供应商，按照 Render 的 CEO 所述，在全面的云供应商（如 AWS）和 PaaS 供应商（如 Heroku）之间，Render 做到了“完美的平衡”。</p>\n<p>连接到一个 GitHub 仓库，每当将代码更新推送到该仓库的时候，都会向服务部署更新。这样的话，没有必要创建单独的构建和部署管道。</p>\n<p>Render 同时解决了这两个问题：我们提供了比现有 PaaS 更有价值的解决方案，尤其是在应用规模扩展方面。<mark>举例来说，如果你的应用需要 2GB RAM，在 Heroku 上你每月需要支付 250 美元。而使用 Render 的话，你只需要每月支付 15 美元，</mark>这是数量级级别的成本节省，它已经非常接近 DIY 云供应商的价格了。</p>\n<p>举例来说，如果你希望运行一个 HTTP 服务，这个服务不能通过互联网进行访问，只能由你的 Render 账户下的其他服务来访问（类似于前端 API 或代理），在 Heroku 中这根本无法实现，而如果使用 AWS 云的话，则会需要很多网络和安全方面的搭建工作。<strong>但是，借助 Render，瞬间就能搭建完成，因为网络管理和服务发现是内置的功能</strong>。</p>"}},{"node":{"frontmatter":{"title":"Taro 1.3 重磅发布：全面支持 JSX 语法和 Hooks","publish":true,"cover":"https://static001.infoq.cn/resource/image/39/88/393b81266c2948dbf2730aeed8ae6d88.png","showCover":true,"date":"2019-06-13","category":"frontend","url":"https://www.infoq.cn/article/kdC7i8j3VP5vg4ji_LFR","author":"凹凸实验室","translator":"","tags":["reactjs"],"priority":1},"html":"<p>多端 vue 阵营有 uni-app,wepy,react 阵营貌似就只 taro。</p>\n<p>最主要的微信小程序端腾讯官方的有 wepy,然而貌似腾讯也在支持 taro。</p>\n<p><a href=\"https://www.cnblogs.com/fundebug/p/compare-wechat-app-frameworks.html\">国内多端比较</a></p>\n<p>国内 uni-app 用的确实比较多。</p>"}},{"node":{"frontmatter":{"title":"css3折叠动画的实现","publish":true,"cover":"https://blog.kazge.com/assets/folding-animation.gif","showCover":true,"date":"2019-06-13","category":"frontend","url":"https://blog.kazge.com/frontend/css/2019/06/12/zh-css-3d-folding-animation/","author":"Ka","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"css 3D 引擎特效","publish":true,"cover":"","showCover":true,"date":"2019-06-15","category":"frontend","url":"https://blog.kazge.com/html/css/2019/06/13/zh-css-3d-engine/","author":"Ka","translator":"","tags":["css"],"priority":1},"html":"<p>纯 css 实现的 3d 特效分析。</p>"}},{"node":{"frontmatter":{"title":"mongodb4.2支持通配符索引","publish":true,"cover":"","showCover":true,"date":"2019-06-05","category":"database","url":"https://www.mongodb.com/blog/post/coming-in-mongodb-42--1-wildcard-indexes","author":"Dj Walker-Morgan (MongoDB) ","translator":"","tags":["mongodb"],"priority":1},"html":"<h2 id=\"语法\"><a href=\"#%E8%AF%AD%E6%B3%95\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>语法</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span>example<span class=\"token punctuation\">.</span><span class=\"token function\">createIndex</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token string\">\"attributes.$**\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token string\">\"createdCollectionAutomatically\"</span> <span class=\"token punctuation\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"numIndexesBefore\"</span> <span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"numIndexesAfter\"</span> <span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">\"ok\"</span> <span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"举例：\"><a href=\"#%E4%B8%BE%E4%BE%8B%EF%BC%9A\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>举例：</h2>\n<p>如下的数据：</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n   <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"book\"</span><span class=\"token punctuation\">,</span>\n   <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"The Red Book\"</span><span class=\"token punctuation\">,</span>\n   <span class=\"token property\">\"attributes\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n       <span class=\"token property\">\"color\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"red\"</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"size\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"large\"</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"inside\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n           <span class=\"token property\">\"bookmark\"</span><span class=\"token operator\">:</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n           <span class=\"token property\">\"postitnote\"</span><span class=\"token operator\">:</span><span class=\"token number\">2</span>\n       <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"outside\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n           <span class=\"token property\">\"dustcover\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"worn\"</span>\n       <span class=\"token punctuation\">}</span>\n   <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">{</span>\n   <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"book\"</span><span class=\"token punctuation\">,</span>\n   <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"The Blue Book\"</span><span class=\"token punctuation\">,</span>\n   <span class=\"token property\">\"attributes\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n       <span class=\"token property\">\"color\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"blue\"</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"size\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"small\"</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"inside\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n           <span class=\"token property\">\"map\"</span><span class=\"token operator\">:</span><span class=\"token number\">1</span>\n       <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"outside\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n           <span class=\"token property\">\"librarystamp\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Local Library\"</span>\n       <span class=\"token punctuation\">}</span>\n   <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">{</span>\n   <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"book\"</span><span class=\"token punctuation\">,</span>\n   <span class=\"token property\">\"title\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"The Green Book\"</span><span class=\"token punctuation\">,</span>\n   <span class=\"token property\">\"attributes\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n       <span class=\"token property\">\"color\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"green\"</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"size\"</span><span class=\"token operator\">:</span><span class=\"token string\">\"small\"</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"inside\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n           <span class=\"token property\">\"map\"</span><span class=\"token operator\">:</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n           <span class=\"token property\">\"bookmark\"</span><span class=\"token operator\">:</span><span class=\"token number\">2</span>\n       <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n       <span class=\"token property\">\"outside\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n           <span class=\"token property\">\"librarystamp\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Faraway Library\"</span><span class=\"token punctuation\">,</span>\n           <span class=\"token property\">\"dustcover\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"good\"</span>\n       <span class=\"token punctuation\">}</span>\n   <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>查询：</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">db<span class=\"token punctuation\">.</span>example<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token string\">\"attributes.inside.bookmark\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">}</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>也就是当数据结构确实是多态模式( <a href=\"https://www.mongodb.com/blog/post/building-with-patterns-the-polymorphic-pattern\">polymorphic pattern</a> )的情况下，使用通配符索引。</p>"}},{"node":{"frontmatter":{"title":"简单易用的express 文件上传中间件","publish":true,"cover":"","showCover":true,"date":"2019-06-13","category":"nodejs","url":"https://github.com/richardgirges/express-fileupload","author":"Ka","translator":"","tags":["express"],"priority":1},"html":"<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>foo<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>file<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">app<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/upload'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>files<span class=\"token punctuation\">.</span>foo<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"mongodb 开源 kafka 连接器","publish":true,"cover":"","showCover":true,"date":"2019-06-05","category":"database","url":"https://github.com/mongodb/mongo-kafka","author":"Scott L Hommedieu (MongoDB, Inc.)","translator":"","tags":["mongodb"],"priority":1},"html":"<p>原生支持数据从 mongodb 流向 kafka 或从 kafka 流向 mongodb。</p>"}},{"node":{"frontmatter":{"title":"nodejs 包分类图书馆","publish":true,"cover":"https://github.com/sindresorhus/awesome-nodejs/raw/master/media/logo.svg?sanitize=true","showCover":true,"date":"2019-06-14","category":"nodejs","url":"https://github.com/sindresorhus/awesome-nodejs","author":"Sindre Sorhus","translator":"","tags":["curated"],"priority":1},"html":"<p>分门别类 nodejs 众多 package 集合，找需要的库？到这里来！</p>"}},{"node":{"frontmatter":{"title":"react-redux7.1.0 开始支持 hooks","publish":true,"cover":"","showCover":true,"date":"2019-06-12","category":"frontend","url":"https://react-redux.js.org/api/hooks","author":"Redux","translator":"","tags":["reactjs"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"不想用 react 和 vue？ 试试 HTML5 Boilerplate","publish":true,"cover":"","showCover":true,"date":"2019-06-13","category":"frontend","url":"https://github.com/h5bp/html5-boilerplate","author":"H5BP","translator":"","tags":["template"],"priority":1},"html":"<p>如果你不想使用 react,vue 等框架，手写 html，那么总得要个模板吧。\n你不至于一行行写浏览器版本查询，css 媒体查询，IE bug polyfills 吧。</p>\n<p>所以这种情况下应该使用 HTML5 Boilerplate。</p>\n<p>HTML5 Boilerplate 是很早的项目，是 html 项目模板。\n内置了 html,css,js 许多经验，最佳实践的总结。\n此项目依然保持更新。对于更早得浏览器支持，可用之前的版本 <a href=\"https://github.com/h5bp/html5-boilerplate/releases/tag/6.1.0\">HTML5 Boilerplate v6 (IE9/IE10)</a> 或者 <a href=\"https://github.com/h5bp/html5-boilerplate/releases/tag/5.3.0\">HTML5 Boilerplate v5 (IE 8)</a>。</p>\n<p>本项目使用 jquery。</p>"}},{"node":{"frontmatter":{"title":"react-spring-弹簧动画","publish":true,"cover":"https://blog.kazge.com/assets/react-spring.gif","showCover":true,"date":"2019-06-12","category":"frontend","url":"https://blog.kazge.com/%E5%89%8D%E7%AB%AF/frontend/2019/06/11/zh-react-spring-animation/","author":"Ka","translator":"","tags":["reactjs"],"priority":2},"html":"<p>依据 react-motion 作者 Cheng Lou 的演讲观点，>95%以上的动画特效使用 spring 即可达到可用的效果，以往那种时间间隔和曲线的动画理念生硬又复杂。</p>"}},{"node":{"frontmatter":{"title":"包含AI的4d国际象棋","publish":true,"cover":"https://img.itch.zone/aW1hZ2UvNDM0ODAwLzIxODc2MTMuZ2lm/347x500/8fNK%2Fb.gif","showCover":true,"date":"2019-06-13","category":"python","url":"https://github.com/anonamause10/4D-chess","author":"anonamause10","translator":"","tags":["ai"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"使用text参数优化谷歌字体","publish":true,"cover":"","showCover":true,"date":"2019-06-13","category":"frontend","url":"https://developers.google.com/fonts/docs/getting_started","author":"Ka","translator":"","tags":["google"],"priority":1},"html":"<p>谷歌字体的 text 参数可以让 api 返回的字体文件只包含 text 传入的字符。\n例如：\n<code class=\"language-text\">https://fonts.googleapis.com/css?family=Inconsolata&amp;text=Hello</code></p>"}},{"node":{"frontmatter":{"title":"组件管理工具-bit","publish":true,"cover":"https://camo.githubusercontent.com/27cea561f1d889d8396d41c51b348204ea043469/68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f6269742d646f63732f636f6d706f6e656e742d646973636f766572792d6269742d72656163742d6769662e676966","showCover":true,"date":"2019-06-10","category":"frontend","url":"https://blog.kazge.com/javascript/frontend/2019/06/10/zh-intro-bit/","author":"Ka","translator":"","tags":["bit"],"priority":1},"html":"<p>bit 是开源的专注于解决前端组件可重用可维护问题的 nodejs 工具。</p>\n<p>这里组件(component)可以是任何可重用的 nodejs 代码片段,然而更多的指的是可以重用的前端组件。<a href=\"https://bit.dev/components\">例子们</a></p>\n<p>bit 通过提供命令行工具来添加管理共享组件。</p>"}},{"node":{"frontmatter":{"title":"跳舞吧排序","publish":true,"cover":"https://blog.kazge.com/assets/sort-visual-bubble.gif","showCover":true,"date":"2019-06-12","category":"algorithm","url":"https://blog.kazge.com/algorithm/2019/06/10/zh-interesting-sort/","author":"Ka","translator":"","tags":["sort"],"priority":1},"html":"<p>当排序遇上舞蹈……</p>"}},{"node":{"frontmatter":{"title":"游戏-飞翔的鸡蛋(Aero Egg)-ios非中国区可下载","publish":true,"cover":"https://blog.kazge.com/assets/volitantegg-show.gif","showCover":true,"date":"2019-06-12","category":"game","url":"https://apps.apple.com/us/app/aero-egg/id1247264387?ls=1","author":"广告","translator":"","tags":["ads"],"priority":3},"html":""}},{"node":{"frontmatter":{"title":"自由软件基金会（FSF）更新软件许可","publish":true,"cover":"https://static001.infoq.cn/resource/image/37/0e/3799b15b664b771d95c5ea60fe2f5d0e.jpg","showCover":true,"date":"2019-06-10","category":"misc","url":"https://www.infoq.cn/article/8cIW66yUAA5*ARZSUqNr","author":"Sue Gee 译者 平川","translator":"","tags":["license"],"priority":1},"html":"<p><a href=\"https://www.gnu.org/licenses/license-list.html\">GNU证书列表</a> 划分了许可证的分类，并用颜色对它们进行了区分：\n从绿到蓝，绿色代表完全免费。</p>\n<p>GitHub 推出微网站 <a href=\"https://choosealicense.com/\">Choose A Licence</a>，帮您选择证书。</p>"}}]}}