mongodb的基本命令和python操作mongodb
阿新 • • 發佈:2018-12-24
簡述:
MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支援的資料結構非常鬆散,是類似json的bson格式,因此可以儲存比較複雜的資料型別。Mongo最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。
linux安裝mongodb的步驟不再贅述,也就是一條命令而已,安裝好mongodb後,如果想遠端連線,要找到/etc/mongodb.conf,將配置檔案中的bind_ip=127.0.0.1 這一行註釋掉或者是修改成 bind_ip=0.0.0.0
在linux中操作mongodb
輸入mongo
進入mongodb,這也是檢驗mongodb是否安裝成功。
基本的CRUD
show dbs # 檢視mongodb中存在的資料庫
use test #切換到test資料庫,如果不存在就新建test資料庫
db.test1.insert({name:'xfy'}) #在集合test1裡新增一條資料(test1不存在會新建)
db.test2.insert([{name:'xfy',age:22,sex:'男'},{name:'stefan',age:23,sex:'男'}]) #在集合test2裡新增多條資料(test2不存在會新建)
#不帶條件查詢
db.test2.find() #查詢test2中的所有資料
db.test2.findOne()#查詢test2中的一條資料
db.test2.find().sort({age:1}) #查詢出來的資料按年齡升序
db.test2.find().sort({age:-1})#查詢出來的資料按年齡降序
#帶條件查詢
db.test2.findOne({name:'xfy'})
db.test2.find({sex:'男'},{_id:0}) #查詢的第一個引數是條件,第二個引數要顯示哪些欄位,預設是都顯示,0是不顯示,1是顯示
db.test2.find({age:{'$gte' :22}}) #查詢大於等於22歲的人,mongodb不支援數學字元
db.test2.find('$or':[{age:22},{sex:'男'}]) 查詢年齡為22或者性別是男的人
#刪除
db.test2.remove({}) 刪除所有
db.test2.remove({name:'xfy'}) 刪除單個
#更新
db.test2.update({name:'stefan'},{'$inc':{age:20}}) #第一個引數是條件,第二個引數是修改值(stefan的age加20)
db.test2.update({},{'$inc':{age:2}},{multi:true}) #修改多條(第三個引數是設定修改多條)
mongodb的修改器:
$inc
對指定的鍵做加法操作,如果指定的關鍵不存在,則新建立這個鍵,並且賦值為$inc指定的值。$set
為指定的鍵賦值,如果指定的鍵不存在,則自動建立。設值的情況比較複雜,比如為內嵌文件的某個Key設值,複雜點在於需要指定MongoDB能夠解析到指定Key的表示式$unset
$set
的反操作,即它用來清除一個Key及其值$push
對陣列進行操作(在MongoDB中,只有Javascript陣列一種集合型別,其它語言如Java的各種集合型別都會儲存為Javascript的陣列),$push
將一個元素追加到集合的末尾(不管這個元素是否存在於陣列中),如果陣列不存在,則首先建立陣列$pushAll
$push
操作的批量版本,如果給$push
操作提供一個數組作為引數,那麼$push認為是把整個陣列作為一個元素加入到指定的陣列末尾.$addToSet $pushAll
的去重版本,即$addToSet
實現了Java的Set集合的特性(Set中不能包含相同的元素)$pop
從陣列中移除一個元素{$pop:{"key":1}}
從陣列末尾刪除;pop:{"key":-1}}
從陣列開頭刪除;- $pull 從陣列中移除指定的元素
$pullAll $pull
的批量版本$rename
修改指定鍵的鍵名
實際的使用不做贅述,因為我們有視覺化工具RoboMongodb,下載解壓版的,解壓就能用。
python操作連線mongodb
連線mongodb
from pymongo import MongoClient
方法一:
client = MongoClient() 預設連線本地的mongodb
方法二:
client = MongoClient('139.13.73.197',27017)
方法三:
client = MongoClient('mongodb://139.13.73.197:27017')
print("資料庫",client.database_names())
#打印出資料庫名,說明連線成功。
基本的CURD
from pymongo import MongoClient
from bson.objectid import ObjectId
#連線mongodb
client = MongoClient('119.23.73.197',27017)
print("資料庫",client.database_names())
print(client)
#選擇資料庫和集合
db=client['students']
collection=db.students
#新增資料:
##新增一條資料
stu={
'name':'徐凡',
'age':23,
'sex':'男'
}
#id=collection.insert(stu)
#print(id) #返回新增id
#objResult=collection.insert_one(stu) #InsertOneResult 但不是stu物件
#print(objResult)
#print(objResult.inserted_id)
#print(dir(objResult))# ['_InsertOneResult__acknowledged', '_InsertOneResult__inserted_id', '_WriteResult__acknowledged', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '_raise_if_unacknowledged', 'acknowledged', 'inserted_id']
##新增多條資料
stus=[
{
'name':'xfy23',
'age':23,
'sex':'男'
},
{
'name':'xfy13',
'age':23,
'sex':'男'
}
]
#objResults=collection.insert_many(stus)
#print(objResults.inserted_ids) # [ObjectId('5aa4ae242e970e031cbf64ec'), ObjectId('5aa4ae242e970e031cbf64ed')]
##查詢資料
o=collection.find_one()
print(o)
#print(o['name'])
os=collection.find({'sex':'n'})
#print(os)# <pymongo.cursor.Cursor object at 0x0000018CF3035978>直接列印查詢介面是不行的,但是他是一個迭代器,可遍歷。
print([o for o in os])
##通過_id查詢
oid=ObjectId('5aa492e8b56df811a42dc993')
one=collection.find_one({'_id':oid},{'_id':0})
#print(one)#{'name': 'zs', 'age': 23.0, 'sex': 'n'}
###修改
##修改單條
#result=collection.update_one({'name':'xfy23'},{'$inc':{'age':12}})
#print(result.matched_count)
#print(result.modified_count)
##修改多條
#results=collection.update_many({},{'$inc':{'age':22}})
#print(results.matched_count)
#print(results.modified_count)
###刪除資料
result=collection.delete_one({'name':'xfy23'})
print(result.deleted_count)
result=collection.delete_many({'sex':'n'})
print(result.deleted_count)
python ODM
相關知識以後再贅述。
有任何疑問請留言評論。