2014-10-06 43 views
2

我們在應用程序中進行了設計更改以適應少量新要求。設計更改迫使我們遷移mongodb集合中的一個,而不是單個字段,必須從現有字段創建派生的JSON字符串作爲字段。Javascript函數用於在mongodb集合中保存現有字段(遷移)中的新字段

遷移過程將由最終用戶在UI中執行操作(如保存更改)調用。但是,這一行動可能會更新數千份文件。所以我們想寫Javascript代碼在服務器端執行,這樣我們可以避免將很多記錄加載到應用程序中。

但是我們遇到的問題是,不能調用Java腳本函數使用eval作爲集合被分割。我們不能考慮的其他選擇是使集合不分割,因爲遷移必須在實時系統上發生。

如果您知道任何替代方法,請幫助我們。

遷移示例:ExampleDoc(集合)具有字段a1,a2,b1和b2。遷移將創建一個名爲fieldJSON的新字段:{a:「」,b:「」}。這裏a和b來自現有的字段a1,a2,b1和b2。

+0

瞭解以避免從數據庫加載大量數據。但對移民的要求不太清楚。任何細節或簡單的例子? – Wizard 2014-10-06 10:01:33

+0

遷移示例:ExampleDoc(集合)。有字段a1,a2,b1和b2。遷移將創建一個名爲fieldJSON的新字段:{a:「」,b:「」}。這裏a和b來自現有的字段a1,a2,b1和b2。 – Samba 2014-10-06 11:04:41

回答

1

好了,現在我明白

  • 你想創建一個新的領域進入同一集合這是分片;
  • 該新字段的內容由現有字段生成;
  • 您不希望將這些現有的字段從數據庫中提取到應用程序進行處理,這可能是因爲大容量;
  • 您不能調用eval數據庫命令,因爲它是分片集合;
  • 你不能拆分當前的集合。

那麼,是否有可能通過mapReduce完成意向?

  1. 查詢您想要更新的確切文檔;
  2. 通過指定一些參數(如{out:{merge:<collectionName>, sharded:true}})映射,縮小並覆蓋此集合的原始文檔。
相關問題