2017-02-21 2 views
-2

Ich habe eine Sammlung von einem Element wie unten in meiner mongoDB Datenbank:Collection-Elemente in Python

{u'Keywords': [[u'european', 7], [u'bill', 5], [u'uk', 5], [u'years', 4], [u'brexit', 4]], u'Link': u'http://www.bbc.com/ 
news/uk-politics-39042876', u'date': datetime.datetime(2017, 2, 21, 22, 47, 7, 463000), u'_id': ObjectId('58acc36b3040a218bc62c6d3')} 
..... 

Diese stammen aus einer Mongo DB Abfrage

mydb = client['BBCArticles'] 
    ##mydb.adminCommand({'setParameter': True, 'textSearchEnabled': True}) 
    my_collection = mydb['Articles'] 
    print 'Articles containing higher occurences of the keyword is sorted as follow:' 
    for doc in my_collection.find({"Keywords":{"$elemMatch" : {"$elemMatch": {"$in": [keyword.lower()]}}}}): 
     print doc 

Allerdings möchte ich drucken Dokumente als folgen:

doc1 
Kewords: european,bill, uk 
Link:"http://www.bbc.com/" 

doc2 
.... 
+0

Scheint ganz willkürlich Anforderungen an mich. Warum nicht die vollständige URL und warum nicht alle Schlüsselwörter? Wo kommen 'doc1' und' doc2' auch her? Sind sie nur im Format 'docN', wobei' N' nur mit jedem Element erhöht wird? Um Ihre Frage zu verbessern, sollten Sie die erwartete Transformation beschreiben und zeigen, was Sie bisher versucht haben. –

+0

Aktualisiert meine Frage. – Mehdi

Antwort

0

Seit Ihrer Sammlung wie ein list von Wörterbüchern sieht, sollte es iterable und pa reseable mit einem for -loop. Wenn in der Tat wollen Sie nur einen Teil der URL und Keywords, sollte diese Arbeit:

# c = your_collection, a list of dictionaries 

from urlparse import urlparse 

for n in range(len(c)): 
    print 'doc{n}'.format(n=n+1) 
    for k, v in c[n].iteritems(): 
     if k == 'Keywords': 
      print k+':', ', '.join([str(kw[0]) for kw in v[0:3]]) 
     if k == 'Link': 
      parsed_uri = urlparse(v) 
      domain = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri) 
      print k+':', '"{0}"\n'.format(domain) 

druckt:

doc1 
Keywords: european, bill, uk 
Link: "http://www.bbc.com/"