python / mongodb子树中的更新和结构

时间:2012-01-22 19:57:33

标签: python mongodb

这是一个持有OHLC股票数据的样本文件,截断(通过python打印)。

{
   "_id":ObjectId("4f1c567d60de7d0908000000"),
   "ticker" : "msft"
   "pricing":[
      {
         "Volume":"2094300",
         "Adj Close":"85.87",
         "High":"88.11",
         "Low":"87.45",
         "Date":         ISODate("2011-01-14T00:00:00         Z"),
         "Close":"88.10",
         "Open":"87.74"
      },
      {
         "Volume":"2351900",
         "Adj Close":"85.81",
         "High":"88.87",
         "Low":"87.76",
         "Date":         ISODate("2011-01-13T00:00:00         Z"),
         "Close":"88.04",
         "Open":"88.47"
      },
      {
         "Volume":"2732900",
         "Adj Close":"86.42",
         "High":"88.76",
         "Low":"87.92",
         "Date":         ISODate("2011-01-12T00:00:00         Z"),
         "Close":"88.66",
         "Open":"88.02"
      }

对此提出疑问:

  1. 有没有办法对文档中的内容进行索引而不是在集合中?我希望能够按日期轻松查找数据,也许有更好的方法来组织数据?

  2. 我对如何检索或更新特定定价数据感到困惑,我尝试使用以下方法推送新的定价数据:

    var = collection.find({'ticker':ticker})//找到正确的文件

    var [0] .update({'$ push':{'pricing':newpricingdata}})//更新公司价值

  3. 但它不起作用。查找工作正常,更新不。

    newpricingdata看起来像(python print):

    [
       {
          'Volume':'3522600',
          'Adj Close':'85.65',
          'High':'85.70',
          'Low':'84.96',
          'Date':datetime.datetime(2012,1,20,0,0),
          'Close':'85.65',
          'Open':'85.45'
       },
       {
          'Volume':'3413700',
          'Adj Close':'85.80',
          'High':'86.23',
          'Low':'84.92',
          'Date':datetime.datetime(2012,1,19,0,0),
          'Close':'85.80',
          'Open':'85.10'
       },
    
    ]
    
    1. 如何通过python检索2012年1月20日的自动收报机价格? mongodb文档并没有真正给出子树操作的好例子......

1 个答案:

答案 0 :(得分:2)

如果您想按日期查询:

collection.ensureIndex({"pricing.Date" : 1}) 

要更新定价数据,您必须在update()上调用collection方法,就像在同一collection上调用find()一样,并且您希望$ pushAll自newpricingdata以来1}}是一个数组:

collection.update({ "_id" : ObjectId("4f1c567d60de7d0908000000")}, { '$pushAll' : { 'pricing' : newpricingdata } }, false, false); 

问题:

  

如何在2012年1月20日之前检索自动收报机的价格   蟒蛇? mongodb文档并没有给出很好的例子   子树操作...

不可能只查询和返回数组的匹配元素,mongodb会给你整个数组。这意味着你必须在python中提取该元素。