2015-09-10 58 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。

相關問題