disruptive
disruptive

Reputation: 5946

MongoDB ObjectID gets added to class property dictionary in python

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  

Here is how to call it:

    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

The problem is that on performing the insert with pymongo, the property called portfolio changes, and there is an extra key added. For example: print port.list_tickers() is different before and after the insert procedure and I do not see why this should be the case. Before the insert, I get ['CSCO', 'RSA', 'ARO'] and after the insert, I get: ['CSCO', 'RSA', '_id', 'ARO'], but I should still be reading from the same class property. The additional _id is obviously the id from MongoDB.

Upvotes: 0

Views: 396

Answers (1)

Evan Wyse
Evan Wyse

Reputation: 36

The _id attribute is mandatory for records in MongoDB - it serves as the unique identifier for a record. MongoDB will create this automatically upon insertion of new records. There is no way to avoid its inclusion in the keys. However, since it's guaranteed to be in each record, you could safely pop it from the list if it really irritates you.

Upvotes: 1

Related Questions