灰机版本 > 2.2.0

MongoDB是一款著名的nosql数据库。灰机通过引入MongoDB的支持,实现了结构化数据的存储和查找,使得具有编程能力的站长可以更加细腻便捷地构筑维基。 MongoDB的数据非常适合与Mustache模板搭配使用。

功能概述

  • 目的与使用Semantic MediaWiki类似,用以在维基上存储数据并在文章页面有针对性的查询和聚合。
  • 这是一项灰机wiki单独开发的功能,仅在本维基平台上提供技术支持,其他使用MediaWiki的托管平台不保证此类功能一定存在并能够按照本文档所述的方法进行操作。

与SMW的对比

数据解决方案 藉由插件 数据库形式 页面存储内容 需要Lua编程
SMW+wikitext Semantic MediaWiki MySQL / SPARQL Wikitext 可选
MongoDB+json HuijiMidware MongoDB JSON 必须
  • :Graph数据,如社交信息,知识百科等。
  • :Json数据,如游戏数据、外部API数据等。

存储数据

在Data(3500)命名空间下,通过为标题添加后缀,内容类型将会从纯文本变为指定类型。

例如,以.json结尾的条目,会自动将内容类型变为Json数据。以.tab结尾的条目,将自动转换为表格型。tabx是对tab进行的扩展,突破了表格只能存储二维数据的限制。具体方法请参阅这里

命名 普通Data页面 Data:xxx.json Data:xxx.tab Data:XXX.tabx
定制化编辑器 ✔️ ✔️ ✔️
Schema检查 ✔️ ✔️ ✔️
映射至MongoDB ✔️ ✔️ ✔️
页面直接使用{{}}嵌套 ✔️ ✔️
排序 ✔️ ✔️
自定义复杂结构 ✔️ ✔️

使用tab和tabx请注意:tab和tabx格式提供Excel的上传和导出功能,但是请注意Excel中的数据类型和tab/tabx并不相符,并且Excel中没有要求每一列的数据格式统一,而tab和tabx是要求的。tab/tabx将检测第二列的数据,自动把True/False转换为布尔型,数字转换为数字型。如果Excel中的第二行数据有空白,将会影响类型的判断。对于这种情况,建议在Excel表的第二行录入一组假数据,便于tab/tabx进行类型判断。

删改数据

tab页面还支持直接上传Excel或CSV

通过具有MongoDB支持的Data页面录入数据后,维基将自动管理该数据的生命周期,用户只需像修改维基一样对数据进行编辑,后台MongoDB的内容也会自动同步更新。

查询数据

通过具有MongoDB支持的Data页面录入数据后,即可通过灰机提供的API进行查询和聚合。

数据形态

MongoDB中的数据都是以Json形式存在的。

命名 Data:xxx.json Data:xxx.tab Data:XXX.tabx
关系 完全一致 第一行表头作为键,以下每一行都是一个以对应列表头为键,以单元格为值的对象。 在tab的基础上,扩充了表头的语义

Lua查询

function mw.huiji.db.find( filter, options ) 实现MongoDB的Find操作

function mw.huiji.db.findOne( filter, options ) 实现MongoDB的FindOne操作

function mw.huiji.db.count( filter, options ) 实现MongoDB的Count操作

function mw.huiji.db.aggregate( pipeline, options ) 实现MongoDB的Aggregate操作

Javascript查询

Javascript查询可通过WebAPI进行,目前API还处于实验阶段,请参照www.huijiwiki.com/api/rest_v1/的文档进行使用。(各维基须将www替换为自己维基的站点前缀,如warcraft)

范例

最终幻想XIV维基是使用本文所列的MongoDB方法搭建的。

avatar
avatar
Reasno
0

@SerGawen 我删掉了响应速度的比较 因为响应速度主要取决于应用场景  对于json数据肯定是mongo快 对于graph数据,应该smw有优势。

11个月