插入檔案
MongoDB 中的一個檔案類似 SQL 表中的一條記錄,插入集合
集合中插入檔案使用 insert_one() 方法,該方法的第一引數是字典 name => value 對, 例:向 sites 集合中插入檔案import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] mydict = { "name": "NOWCODER", "alexa": "10000", "url": "https://www.nowcoder.com" } x = mycol.insert_one(mydict) print(x) print(x)
結果如下:
<pymongo.results.InsertOneResult object at 0x10a34b288>
回傳 _id 欄位
insert_one() 方法回傳 InsertOneResult 物件,該物件包含 inserted_id 屬性,它是插入檔案的 id 值,
import pymongo myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['nowcoderdb'] mycol = mydb["sites"] mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" } x = mycol.insert_one(mydict) print(x.inserted_id)
結果如下:
5b2369cac315325f3698a1cf
插入多個檔案
集合中插入多個檔案使用 insert_many() 方法,該方法的第一引數是字典串列,
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] mylist = [ { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" }, { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" }, { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" }, { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" }, { "name": "Github", "alexa": "109", "url": "https://www.github.com" } ] x = mycol.insert_many(mylist) # 輸出插入的所有檔案對應的 _id 值 print(x.inserted_ids)
輸出結果類似如下:
[ObjectId('5b236aa9c315325f5236bbb6'), ObjectId('5b236aa9c315325f5236bbb7'), ObjectId('5b236aa9c315325f5236bbb8'), ObjectId('5b236aa9c315325f5236bbb9'), ObjectId('5b236aa9c315325f5236bbba')]
插入指定 _id 的多個檔案
我們也可以自己指定 id,插入,以下實體我們在 site2 集合中插入資料,_id 為我們指定的:
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["site2"] mylist = [ { "_id": 1, "name": "NOWCODER", "cn_name": "牛客教程"}, { "_id": 2, "name": "Google", "address": "Google 搜索"}, { "_id": 3, "name": "Facebook", "address": "臉書"}, { "_id": 4, "name": "Taobao", "address": "淘寶"}, { "_id": 5, "name": "Zhihu", "address": "知乎"} ] x = mycol.insert_many(mylist) # 輸出插入的所有檔案對應的 _id 值 print(x.inserted_ids)
結果如下:
[1, 2, 3, 4, 5]
查詢檔案
MongoDB 中使用了 find 和 find_one 方法來查詢集合中的資料,它類似于 SQL 中的 SELECT 陳述句,
查詢一條資料
我們可以使用 find_one() 方法來查詢集合中的一條資料,
例:查詢 sites 檔案中的第一條資料
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] x = mycol.find_one() print(x)
結果如下:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
查詢集合中所有資料
find() 方法可以查詢集合中的所有資料,類似 SQL 中的 SELECT * 操作,
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] for x in mycol.find(): print(x)
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
根據指定條件查詢
我們可以在 find() 中設定引數來過濾資料,
例:查找 name 欄位為 "NOWCODER" 的資料
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myquery = { "name": "NOWCODER" } mydoc = mycol.find(myquery) for x in mydoc: print(x)
結果如下:
查詢的條件陳述句中,我們還可以使用修飾符,
以下實體用于讀取 name 欄位中第一個字母 ASCII 值大于 "H" 的資料,大于的修飾符條件為 {"$gt": "H"} :
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myquery = { "name": { "$gt": "H" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)
結果如下:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
回傳指定條數記錄
如果我們要對查詢結果設定指定條數的記錄可以使用 limit() 方法,該方法只接受一個數字引數,
例:回傳 3 條檔案記錄myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myresult = mycol.find().limit(3) # 輸出結果 for x in myresult: print(x)
結果只有三條了:
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
我們可以在 MongoDB 中使用 update_one() 方法修改檔案中的記錄,該方法第一個引數為查詢的條件,第二個引數為要修改的欄位,如果查找到的匹配資料多余一條,則只會修改第一條,
例:將 alexa 欄位的值 10000 改為 12345
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myquery = { "alexa": "10000" } newvalues = { "$set": { "alexa": "12345" } } mycol.update_one(myquery, newvalues) # 輸出修改后的 "sites" 集合 for x in mycol.find(): print(x)
update_one() 方法只能修匹配到的第一條記錄,如果要修改所有匹配到的記錄,可以使用 update_many(),
以下實體將查找所有以 F 開頭的 name 欄位,并將匹配到所有記錄的 alexa 欄位修改為 123:
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myquery = { "name": { "$regex": "^F" } } newvalues = { "$set": { "alexa": "123" } } x = mycol.update_many(myquery, newvalues) print(x.modified_count, "檔案已修改")
排序
sort() 方法可以指定升序或降序排序,
sort() 方法第一個引數為要排序的欄位,第二個欄位指定排序規則,1 為升序,-1 為降序,默認為升序,
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] mydoc = mycol.find().sort("alexa") for x in mydoc: print(x)
以上代碼實作了對欄位 alexa 按升序排序,
洗掉資料
我們可以使用 delete_one() 方法來洗掉一個檔案,該方法第一個引數為查詢物件,指定要洗掉哪些資料,
例:洗掉 name 欄位值為 "Taobao" 的檔案
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myquery = { "name": "Taobao" } mycol.delete_one(myquery) # 洗掉后輸出 for x in mycol.find(): print(x)
洗掉多個檔案
我們可以使用 delete_many() 方法來洗掉多個檔案,該方法第一個引數為查詢物件,指定要洗掉哪些資料,
例:洗掉所有 name 欄位中以 F 開頭的檔案
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] myquery = { "name": {"$regex": "^F"} } x = mycol.delete_many(myquery) print(x.deleted_count, "個檔案已洗掉")
結果如下:
1 個檔案已洗掉
洗掉集合中的所有檔案
delete_many() 方法如果傳入的是一個空的查詢物件,則會洗掉集合中的所有檔案:
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] x = mycol.delete_many({}) print(x.deleted_count, "個檔案已洗掉")
結果如下: 5 個檔案已洗掉
洗掉集合
我們可以使用 drop() 方法來洗掉一個集合,
以下實體洗掉了 customers 集合:
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["nowcoderdb"] mycol = mydb["sites"] mycol.drop()
如果洗掉成功 drop() 回傳 true,如果洗掉失敗(集合不存在)則回傳 false,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519249.html
標籤:Python
上一篇:一、python入門
