2012-03-08 36 views

回答

6

如果您在本地嘗試此功能,它將起作用。但是,這完全在分片場景中失敗,因爲集合或集合中的數據將不在分片本地。

這也是不好的做法,因爲在M/R可引起級聯的查詢是很難追查。

如果您遇到這個問題,你有幾個optiosn:

  1. 進行非標準化的數據:如果map上收集A需要從收集B領域x,y,z,則這些字段複製到A。是的,它沒有被標準化,但MongoDB不是一個關係數據庫,它不打算被標準化。
  2. 多部分M/R:在很多情況下,你可以通過執行一些不同的操作,並將結果寫入到一個單一的集合實現相同的結果。所以,也許你首先在A上做M/R,然後循環輸出,並用B中的數據在單獨的腳本/過程中更新。

我見過使用這兩個選項。我甚至見過#2轉換成簡單的for循環,它可以同時處理兩個部分。我已經用簡單的for循環和upserts成功地替換了一些M/R作業。

+0

另請注意,訪問另一個集合在Mongo 2.4中也不會工作, mapReduce訪問其他集合的功能已被刪除。參見[發行說明](http://docs.mongodb.org/manual/release-notes/2.4/#additional-limitations-for-map-reduce-and-where-operations) – jbyler 2015-03-10 20:17:16

2

這是不可能的,因爲它會在分片設置中破壞。 Map/Reduce只能使用它們被調用的集合。