How to convert a pymongo.cursor.Cursor into a dict?

前端 未结 6 1430
日久生厌
日久生厌 2020-12-02 16:18

I am using pymongo to query for all items in a region (actually it is to query for all venues in a region on a map). I used db.command(SON()) before to search i

相关标签:
6条回答
  • 2020-12-02 17:01

    to_dict() Convert a SON document to a normal Python dictionary instance.

    This is trickier than just dict(...) because it needs to be recursive.

    http://api.mongodb.org/python/current/api/bson/son.html

    0 讨论(0)
  • 2020-12-02 17:02

    I suggest create a list and append dictionary into it.

    x   = []
    cur = db.dbname.find()
    for i in cur:
        x.append(i)
    print(x)
    

    Now x is a list of dictionary, you can manipulate the same in usual python way.

    0 讨论(0)
  • 2020-12-02 17:04

    The MongoDB find method does not return a single result, but a list of results in the form of a Cursor. This latter is an iterator, so you can go through it with a for loop.

    For your case, just use the findOne method instead of find. This will returns you a single document as a dictionary.

    0 讨论(0)
  • 2020-12-02 17:06

    Map function is fast way to convert big collection

    from time import time
    
    
    cursor = db.collection.find()
    
    def f(x):
        return x['name']
    
    t1 = time()
    blackset = set(map(f, cursor))
    print(time() - t1)
    
    0 讨论(0)
  • 2020-12-02 17:07

    The find method returns a Cursor instance, which allows you to iterate over all matching documents.

    To get the first document that matches the given criteria you need to use find_one. The result of find_one is a dictionary.

    You can always use the list constructor to return a list of all the documents in the collection but bear in mind that this will load all the data in memory and may not be what you want.

    You should do that if you need to reuse the cursor and have a good reason not to use rewind()


    Demo using find:

    >>> import pymongo
    >>> conn = pymongo.MongoClient()
    >>> db = conn.test #test is my database
    >>> col = db.spam #Here spam is my collection
    >>> cur = col.find()  
    >>> cur
    <pymongo.cursor.Cursor object at 0xb6d447ec>
    >>> for doc in cur:
    ...     print(doc)  # or do something with the document
    ... 
    {'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}
    {'a': 1, 'c': 3, '_id': ObjectId('54ff32a2add8f30feb902690'), 'b': 2}
    

    Demo using find_one:

    >>> col.find_one()
    {'a': 1, '_id': ObjectId('54ff30faadd8f30feb90268f'), 'b': 2}
    
    0 讨论(0)
  • 2020-12-02 17:19

    Easy

    import pymongo
    conn = pymongo.MongoClient()
    db = conn.test #test is my database
    col = db.spam #Here spam is my collection
    array = list(col.find())
    
    print array
    

    There you go

    0 讨论(0)
提交回复
热议问题