python 查詢mongodb數據

Python mongodb驅動安裝

安裝驅動

在max&linux裏面直接在終端裏面輸入下面的語句就可讓python支持mongo python

pip install pymongo linux

加載 pymongo

直接在交互終端裏面輸入下面的語句,加載pygmon模塊 git

from pymongo import MongoClient github

建立一個鏈接

使用MongoClient 建立一個鏈接: mongodb

client=MongoClient() 數據庫

也能夠經過傳入參數進行選項設置 json

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] ui

具體的內容能夠參與MongoDB URL spa

訪問數據庫對象

mongo的數據庫不用事前建立,當你調用cient.DatabaseName,通常DatabaseName沒有建立它會自動幫助建立一個數據庫,第二次這樣訪問的時候就會直接建立的是以前建立的對象 rest

b = client.primer

你也能夠經過下面的方式來進行數據的訪問

db=client['primer']

插入數據

在mongo裏面插入數據有兩個方法insert_one()和insert_many(),前面的方式單次只能插入一個文檔,後面的方法能夠插入多個文檔內容。假若插入的集合沒有事先定義,MongoDB會直接建立。

先決條件

咱們經過 MongClient模塊,而且建立一個鏈接,鏈接成功以後選擇test數據庫

from pymongo import MongoClient

client=MongoClient()

db=client.test2

插入一個文檔

下面是將一個文檔插入到restaurants的集合當中,若是這個restaurants集合沒有包含在數據庫當中,會自動進行建立。

result = db.restaurants.insert_one(
    {
        "address": {
            "street": "2 Avenue",
            "zipcode": "10075",
            "building": "1480",
            "coord": [-73.9557413, 40.7720266]
        },
        "borough": "Manhattan",
        "cuisine": "Italian",
        "grades": [
            {
                "date": datetime.strptime("2014-10-01", "%Y-%m-%d"),
                "grade": "A",
                "score": 11
            },
            {
                "date": datetime.strptime("2014-01-16", "%Y-%m-%d"),
                "grade": "B",
                "score": 17
            }
        ],
        "name": "Vella",
        "restaurant_id": "41704620"
    }
)

上面的操做會返回一個InsertOneResult對象,它包含一個_id和inserted_id對象

result.inserted_id

查詢數據

mongodb查詢調用的是find()方法,能夠傳入一些查詢的條件來查詢想要的結果。返回的是一個可供遍歷的結果集合,
對於下面全部的示例用的都是官網上面提示的一個實例文件,primer-dataset.json
下載完成以後經過在終端裏面輸入下面的語句就能夠導入相應的數據

mongoimport --db test --collection restaurants --drop --file primer-dataset.json

對象的格式大概以下:

{'_id': ObjectId('5704d3c3a75b1775d3b21352'),
'address': {'coord': [-73.98513559999999, 40.7676919], 'zipcode': '10019', 'street': 'West   57 Street', 'building': '351'},
'name': 'Dj Reynolds Pub And Restaurant',
'borough': 'Manhattan',
'restaurant_id': '30191841',
'cuisine': 'Irish',
'grades': [{'score': 2, 'date': datetime.datetime(2014, 9, 6, 0, 0), 'grade': 'A'},
{'score': 11, 'date': datetime.datetime(2013, 7, 22, 0, 0), 'grade': 'A'},
{'score': 12, 'date': datetime.datetime(2012, 7, 31, 0, 0), 'grade': 'A'},
{'score': 12, 'date': datetime.datetime(2011, 12, 29, 0, 0), 'grade': 'A'}]}

查詢全部的數據

下面的的語句調用的是find()的方法,返回restaurants當中全部集合中的全部對象.

cursor=db.restaurants.find()

迭代遍歷cursor而且將結果進行輸出

for document in cursor:
print(document)

指定條件查詢

下面的查找操做僅顯示borough爲Manhattan的對象.

cursor = db.restaurants.find({"borough": "Manhattan"})

一樣經過迭代遍歷的方式輸出查詢的結果

    for document in cursor:
        print(document)

查詢一個嵌入式的文檔

在mongto裏面的對象能夠在自身包含另外一個集合,好比下面的對象。
上面的primer-dataset.json裏面的address是一個集合包含了coord,zipcode,street,building四個數據。
咱們經過下面的語句查詢address.zipcode僅爲10075的集合

cursor = db.restaurants.find({"address.zipcode": "10075"})
for document in cursor:
    print(document)

經過條件查詢對象

下面的語句查詢的是grandes.score大於30的對象

cursor = db.restaurants.find({"grades.score": {"$gt": 30}})

下面的語句查詢的是grades.score小於10的集合

cursor = db.restaurants.find({"grades.score": {"$lt": 10}})

邏輯條件判斷

在mongo查詢的時候能夠經過使用(AND)和(OR)來查詢

下面的查詢的語句至關於,僅顯示cuisine爲Italian和address.zipcode爲10075的數據。只有同時知足才顯示。

cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"})
for document in cursor:
    print(document)

下面的查詢的語句至關於,僅顯示cuisine爲Italian和address.zipcode爲10075的數據。兩個條件只要知足一個就能夠.

cursor = db.restaurants.find({
"$or":[{"cuisine": "Italian", "address.zipcode": "10075"}]
}
)
for document in cursor:
    print(document)

數據排序

能夠經過調用 pymongo.ASCENDING()pymongo.DESCENDING()來指定是按升降序進行排

import pymongo
cursor = db.restaurants.find().sort([
    ("borough", pymongo.ASCENDING),
    ("address.zipcode", pymongo.ASCENDING)
])
相關文章
相關標籤/搜索