1. 程式人生 > >mongodb的基本命令和python操作mongodb

mongodb的基本命令和python操作mongodb

簡述:

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

相關知識以後再贅述。

有任何疑問請留言評論。