2015-09-10 55 views
0

当表格为固定大小时,为了在Mongodb中存储类似数据的表格,数组可以工作。但是,当桌子可以增长(如电子表格),或者甚至更灵活(动物园内某物种的动物数量,物种和动物园都可以扩展)时,这种方法无效。所以我想更象:在mongodb中存储表格(电子表格)数据的最佳方式

{ 
    "name": "spreadsheet example", 
    "cells": [ 
     { 
      "row": 1, 
      "col": 1, 
      "val": 4 
     }, 
     { 
      "row": 1, 
      "col": 2, 
      "val": 9 
     }, 
     { 
      "row": 1, 
      "col": 3, 
      "val": "a1+a2" 
     } 
    ] 
} 

这会工作,甚至是有效的疏表,但渲染表时为HTML它需要为每一个细胞,或建设一些中间数据结构的查找。另外,通过这种方式,可以在更新中使用'$'位置运算符来更新单个单元格,但是如果我们有多个选项卡,则会出现问题,因为'$'无法嵌套...

是否有更好在mongodb中存储这些信息的方法?我认为使用行/列名称作为字段名称,但这会导致动态字段名称,也可能不是最佳解决方案。

回答

0

你不应该这样做。 Mongodb基于documents,具有优点和缺点。

在你的情况,你应该使用面向一个的MySQL数据库或任何其他数据库,你需要存储的电子表格。

0

的事情,我担心你的方法是:

  • The maximum BSON document size这是16兆,这 意味着你不能存储大的电子表格中的单一文件
  • 访问与“$”操作数组项是有点复杂
  • 它有很多的存储开销(保持为每一个细胞行/列信息 我宁愿用一种更自然的模式为:

    {_id:ROW_NUMBER,为col_a:value_of_column_A,...,col_n:value_of_column_n}

和奉献一个收集用于一个电子表格或:

{_id: spreadsheet_name, row: row_number, col_a:value_of_column_A, .... , col_n:value_of_column_n} 

如果您想为每个集合容纳多个电子表格。 这样您也可以使用有意义的标题名称而不是列号。 我写了an open sourced module in python,它使用上述模式自动将电子表格或完整工作簿通过xlrd导入到mongoDB。

相关问题