Python操作MongoDB代码示例
1 import pymongo #pip install pymongo安装python操作mongodb的模块 2 myclient=pymongo.MongoClient(host='127.0.0.1',port=27017) #指定主机和端口号创建客户端 3 4 dblist=myclient.list_database_names() #查看MongoDB中存在的数据库 5 print(dblist) 6 7 mydb=myclient['dbtest']#数据库使用:有则直接使用,没有的话数据库只有在内容插入后才会自动创建! 8 print(mydb) 9 10 collist = mydb. list_collection_names()#查看当前数据库中的表 11 print(collist) 12 13 14 mycol=mydb['t1']#表(集合)使用:有则直接使用,没有的话集合只有在内容插入后才会创建! 15 print(mycol) 16 17 #MongoDB中数据表的操作: 18 19 # 1.添加数据 20 ''' 21 添加数据: 22 (1)insert()----单条和多条插入:MongoDB3.2版本自之前 23 db.collection.insert({}) 24 db.collection.insert([{},{}...]) 25 (2)3.2之后官方推荐: 26 insert_one()----单条插入 27 db.collection.insert_one({}) 28 insert_many()----多条插入 29 db.collection.insert_many([{},{}...]) 30 ''' 31 # 32 # res1=mycol.insert([{'name':'a','age':20,'gender':1}]) 33 # print(res1) 34 # res2=mycol.insert([{'name':'b','age':21,'gender':0},{'name':'c'}]) 35 # print(res2) 36 37 38 mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" } 39 mylist = [ 40 { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" }, 41 { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" }, 42 { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" }, 43 { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" }, 44 { "name": "Github", "alexa": "109", "url": "https://www.github.com" } 45 ] 46 # res3=mycol.insert_one(mydict) 47 # print(res3) 48 # res4=mycol.insert_many(mylist) 49 # print(res4) 50 51 52 #2.查询数据 53 ''' 54 查询数据: 55 (1)find()----查询符合条件的所有数据 56 db.collection.find(查询条件) 57 (2)find_one()----查询符合条件的第一条数据 58 db.collection.find_one(查询条件) 59 ''' 60 61 62 all=mycol.find() 63 # all=mycol.find({'age':21}) 64 print(all) 65 for doc in all: 66 print(doc) 67 68 # one=mycol.find_one() 69 # one=mycol.find_one({'age':21}) 70 # print(one) 71 72 73 #3.修改数据(不存在即创建) 74 ''' 75 (1)update()---只能修改查询出的第一条数据 76 db.coolection.update({查询条件},{$修改器:{修改值}}) 77 修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值 78 (2)3.2之后官方推荐: 79 update_one()----修改查询结果的第一条数据 80 db.colleciton.update_one({查询条件},{$修改器:{修改值}}) 81 update_many()----修改查询结果所有数据 82 db.colleciton.update_many({查询条件},{$修改器:{修改值}}) 83 ''' 84 # res5=mycol.update({'name':'c'},{'$set':{'age':23}}) 85 # print(res5) 86 87 # res6=mycol.update_one({'name':'d'},{'$set':{'age':30,'gender':1}}) 88 # print(res6) 89 # res7=mycol.update_many({'name':'d'},{'$set':{'age':22}}) 90 # print(res7) 91 92 93 #4.删除数据 94 ''' 95 (1)remove()----不在推荐使用 96 db.collection.remove(查询条件)----删除符合查询结果的所有数据 97 (2)3.2之后官方推荐: 98 delete_one()----删除查询结果的第一条数据 99 db.colleciton.delete_one(查询条件) 100 delete_many()----删除查询结果的所有数据 101 db.colleciton.delete_many(查询条件) 102 ''' 103 # res8=mycol.remove({'age':22}) 104 # print(res8) 105 106 # res9=mycol.delete_one({'name':'c'}) 107 # print(res9) 108 109 # res10=mycol.delete_many({'name':'a'}) 110 # print(res10) 111 112 113 #5.数据排序+跳跃+范围 114 ''' 115 对查询结果进行排序、跳跃取值、范围截取 116 117 (1)sort(filed,pymongo.ASCENDING/pymongo.DESCENDING)----对查询结果升序/降序排序 118 db.collection.find({}).sort() 119 (2)skip(num)----对查询结果进行跳跃取值 120 db.collection.find({}).skip() 121 (3)limit(num)----对查询结果进行范围截取 122 db.collection.find({}).limit() 123 (4)优先级:sort>skip>limit,与使用时的顺序无关 124 db.collection.find({}).sort().skip().limit() 125 db.collection.find({}).limit().sort().skip() 126 db.collection.find({}).skip().sort().limit() 127 ''' 128 print('----------------------------') 129 alldata1=mycol.find({}).sort('age',pymongo.ASCENDING)#升序 130 for i in alldata1: 131 print(i) 132 print('----------------------------') 133 alldata2=mycol.find({}).skip(8) 134 for i in alldata2: 135 print(i) 136 print('----------------------------') 137 alldata3=mycol.find({}).limit(2) 138 for i in alldata3: 139 print(i) 140 141 #6.查询关键字 142 ''' 143 (1)$and----并列查询 144 db.collection.find({'$and':[{},{}...]}) 145 (2)$or----或条件查询 146 db.collection.find({'$or':[{},{}...]}) 147 (3)$in----范围查询 148 db.collection.find({field:{'$in':['',''...]}}) 149 (4)$all----子集查询 150 db.collection.find({field:{'$all':['',''...]}}) 151 ''' 152 153 print('+++++++++++++++++++++++++++++++') 154 res11=mycol.find({"name":'c'}) 155 for i in res11: 156 print(i) 157 158 print('+++++++++++++++++++++++++++++++') 159 res12=mycol.find({'$and':[{'name':'c'},{'age':20}]}) 160 for i in res12: 161 print(i) 162 163 print('+++++++++++++++++++++++++++++++') 164 res13=mycol.find({'$or':[{'name':'c'},{'name':'b'}]}) 165 for i in res13: 166 print(i) 167 168 print('+++++++++++++++++++++++++++++++') 169 res14=mycol.find({'name':{'$in':['c','b']}}) 170 for i in res14: 171 print(i) 172 173 174 175 print('+++++++++++++++++++++++++++++++') 176 # res15=mycol.find({'hobby':{'$all':['run','eat','swim']}}) 177 res15=mycol.find({'hobby':{'$all':['run','eat']}}) 178 for i in res15: 179 print(i) 180 181 #7.查询条件操作符(一般用于数字比较) 182 ''' 183 (1)$lt----小于 184 db.collection.find({field:{'$lt':value}}) 185 (2)$gt----大于 186 db.collection.find({field:{'$gt':value}}) 187 (3)$eq----等于 188 db.collection.find({field:{'$eq':value}}) 189 (4)$lte----小于等于 190 db.collection.find({field:{'$lte':value}}) 191 (5)$gte----大于等于 192 db.collection.find({field:{'$gte':value}}) 193 (6)$ne----不等于 194 db.collection.find({field:{'$ne':value}}) 195 ''' 196 197 # mycol.insert_many([{'name':'d','age':18},{'name':'e','age':22},{'name':'f','age':32},]) 198 print("**************************************") 199 res16=mycol.find({'age':{'$lt':21}}) 200 for i in res16: 201 print(i) 202 203 print("**************************************") 204 res17=mycol.find({'age':{'$gt':21}}) 205 for i in res17: 206 print(i) 207 208 print("**************************************") 209 res18=mycol.find({'age':{'$eq':21}}) 210 for i in res18: 211 print(i) 212 print("**************************************") 213 res19=mycol.find({'age':{'$lte':21}}) 214 for i in res19: 215 print(i) 216 217 print("**************************************") 218 res20=mycol.find({'age':{'$gte':21}}) 219 for i in res20: 220 print(i) 221 222 223 print("**************************************") 224 res21=mycol.find({'age':{'$ne':21}}) 225 for i in res21: 226 print(i) 227 228 229 #8.$修改器 + $ 字符特殊用法 230 ''' 231 (1)$set----修改某个字段的值 232 (2)$unset---删除字段 233 (3)$inc----引用增加(先引用 后增加) 234 (4)针对数组操作: 235 ①$push----在Array的最后一个位置中增加一个数据 236 ②$pushAll----在Array的最后一个位置中增加多个数据 237 ③$pull ----删除Array中的指定单个元素 238 ④$pullAll ----删除Array中的指定多个元素 239 ⑤$pop----删除Array中的第一个或者最后一个元素 正数是倒序删除 负数是正序删除 240 ⑥$----存储当前(Array)符合条件的元素下标索引 ,只能存储最外层的 索引位置 241 ''' 242 # mycol.update_one({'name':'c','age':20},{'$set':{'hobby':['swim,dump','sing']}}) 243 # mycol.update_one({'$and':[{'name':'c'},{'age':20}]},{"$unset":{'hobby':[1,2]}}) 244 # mycol.update_many({'name':{'$in':['d','e','f']}},{'$inc':{'age':2}}) 245 # mycol.update_one({'name':'b'},{'$push':{'hobby':['swim','sing']}}) 246 247 # mycol.update({'name':'c'},{'$pushAll':{'hobby':['sing','scrapy']}})#实际测试无法使用,报错:Unknown modifier: $pushAll 248 # mycol.update_many({'name':'b'},{'$pullAll':{'hobby':['swim','play']}})#实际测试每次只删除一个元素 249 250 # mycol.update_one({'hobby':'run'},{'$pull':{'hobby':'eat'}}) 251 # mycol.update_many({'hobby':'run'},{'$pop':{'hobby':1}}) 252 # mycol.update_many({'hobby':'run'},{'$pop':{'hobby':-1}}) 253 254 # mycol.update_many({'name':'c','age':{'$ne':20}},{'$set':{'hobby':['swim','sing']}}) 255 # mycol.update_many({'hobby':'run'},{'$push':{'hobby':'swim'}})