Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python / Dictionary / List / Mongo insert issues - beginner

Tags:

python

pymongo

Sorry, trying to understand and get used to dictionary and list objects.

I'm calling eBay's API through their ebaysdk, and want to store the items from it to a collection as documents in Mongo. Simple.

Here's a sample of the schema that will be returned:

<timestamp>2009-09-04T00:47:12.456Z</timestamp>
  <searchResult count="2">
  <item>
     <itemId>230371938681</itemId>
     <title>Harry Potter and the Order of the Phoenix HD-DVD</title>
     <globalId>EBAY-US</globalId>
     <primaryCategory>
        <categoryId>617</categoryId>
        <categoryName>DVD, HD DVD & Blu-ray</categoryName>
     </primaryCategory>

I've tried 500 iterations of this code, stripped down to the most basic here's what I have.

from ebaysdk import finding
from pymongo import MongoClient

api = finding(appid="billy-40d0a7e49d87")
api.execute('findItemsByKeywords', {'keywords': 'potter'})
listings = api.response_dict()

client = MongoClient('mongodb://user:[email protected]:10099/ebaystuff')
db = client['ebaycollection']
ebay_collection = db.ebaysearch

for key in listings:
  print key
  ebay_collection.insert(key)

Will get this error:

Traceback (most recent call last):
  File "ebay_search.py", line 34, in <module>
    ebay_collection.insert(key)
  File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 408, in insert
    self.uuid_subtype, client)
  File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 378, in gen
    doc['_id'] = ObjectId()
TypeError: 'str' object does not support item assignment

Simple stuff. All I want to do is add each item as a document.

like image 835
chuckjones242 Avatar asked Oct 21 '22 08:10

chuckjones242


1 Answers

An immutable type like a string cannot be used as a document because it doesn't allow adding additional fields, like the _id field Mongo requires. You can instead wrap the string in a dictionary to serve as a wrapper document:

key_doc = {'key': key}
ebay_collection.insert(key_doc)
like image 132
Amber Avatar answered Nov 03 '22 06:11

Amber