2012-06-05 59 views
1

好吧,不確定mongodb是否可以做到這一點,但我需要的是將以下JSON插入到我的貨幣數據庫中。MongoDB PHP插入子數組

我們想要更新的部分是exchangehistory,我們需要保留當天匯率的所有歷史記錄。第二天例如

爲e.g

{"from":"USD","currentexchange":[{"to":"NZD","rate":"1.3194","updated":"6\/5\/20121:38am"},{"to":"KWD","rate":"0.2807","updated":"6\/5\/20121:38am"},{"to":"GBP","rate":"0.6495","updated":"6\/5\/20121:38am"},{"to":"AUD","rate":"1.0228","updated":"6\/5\/20121:38am"}],"exchangehistory":{"6\/5\/2012":[{"1:38am":[{"to":"NZD","rate":"1.3194","updated":"1:38am"}]},{"1:38am":[{"to":"KWD","rate":"0.2807","updated":"1:38am"}]},{"1:38am":[{"to":"GBP","rate":"0.6495","updated":"1:38am"}]},{"1:38am":[{"to":"AUD","rate":"1.0228","updated":"1:38am"}]}]}} 
+0

查找$ addToSet。可能的重複:http://stackoverflow.com/questions/7026483/insert-data-into-inner-array-in-mongodb –

回答

0

我很可能不會將此存儲在這樣的數組中。我會創建一個扁平的數據結構,它具有:

{ 
    from: "USD", 
    to: "EUR", 
    updated: new DateTime("2012-05-04 13:43"), 
    rate: 1.235, 
}, 
{ 
    from: "USD", 
    to: "EUR", 
    updated: new DateTime("2012-05-06 13:43"), 
    rate: 1.24, 
}, 
{ 
    from: "USD", 
    to: "AUD", 
    updated: new DateTime("2012-05-06 13:43"), 
    rate: 1.43, 
} 

這對數據庫來說很輕,因爲文檔永遠不會增長。如果文件增多,它們必須移動。您還可以非常容易地查詢當前率:

$collection->find(array('from' => 'USD', 'to' => 'EUR')) 
      ->sort('updated' => -1)->limit(1); 

和訪問所有的歷史信息:

$collection->find(array('from' => 'USD', 'to' => 'EUR')) 
      ->sort('updated' => -1)->skip(1); 
+0

雖然這很好,我們還需要存儲貨幣匯率的歷史 – RussellHarrower

+0

對, d仍然有每個轉換的舊文件。沒有任何東西阻止您從兩個USD-> EUR文檔中選擇不同的「更新」字段。我已經在上面添加了另一個文檔來說明這一點。 – Derick

-1

這不是PHP,但它可能是有用的。你必須從你的json字符串中創建一個BSON對象才能存儲在數據庫中。 Creating BSON from JSON 以及您可以使用MongoDB PHP驅動程序教程和文檔。他們可以在這裏找到:MongoDB PHP Driver Tutorial