2012-06-05 60 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