2014-12-29 59 views
0
class Portfolio: 

    def read(self, pathfilename): 
     .... stuff .... 
     self.portfolio[comp_symbol] = {'name': comp_name , 'holdings': comp_holdings} 



    def save_portfolio(self, port_collection): 
     port_collection.insert(self.portfolio) 


    def list_tickers(self): 
     return (self.portfolio.keys()) 

    def __init__(self): 
      self.portfolio = {} 
      self.id = None 

下面是如何称呼它:MongoDB的对象ID被添加到类属性字典,在python

port = Portfolio() 
    print "===================================================================================" 
    print port.id 
    print port.portfolio 
    print "===================================================================================" 

    port.read(portfolio_file) 
    print port.id 
    print port.portfolio 
    print port.portfolio.keys() 
    print "===================================================================================" 

    print port.list_tickers() 
    port.save_portfolio(port_collection) 
    print port.list_tickers() 
    print port.portfolio 

的问题是,在与pymongo执行插入,财产被称为投资组合的变化,并有一个额外的密钥添加。例如:print port.list_tickers()在插入过程之前和之后是不同的,我不明白为什么会这样。在插入之前,我得到['CSCO', 'RSA', 'ARO'],插入后,我得到:['CSCO', 'RSA', '_id', 'ARO'],但我仍然应该阅读相同的类属性。额外的_id显然是来自MongoDB的ID。

回答

1

对于MongoDB中的记录,_id属性是强制性的 - 它用作记录的唯一标识符。插入新记录后,MongoDB将自动创建它。没有办法避免将它包含在密钥中。但是,由于它保证在每个记录中,因此如果它真的让你感到不适,你可以安全地从列表中弹出它。