Python操作MongoDB代码示例

Stella981
• 阅读 767
  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'}})
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这