mongodb修改数据语句_【S01E03】Pymongo操作mongoDB数据库

6d1a4f823d5874d16427c36f175f3105.png

数据在MongoDB中是按照"库(Database)"——"集合(collections)"——"文档(Document)"的层级关系来存储的。如果使用Python的数据结构来做类比的话:文档相当于一个字典;集合相当于一个包含了很多字典的列表;库相当于一个大字典,大字典里面的每一个键值对都对应了一个集合,Key为集合的名字,Value就是一个集合。

I.    初始化连接对象

II.   指定(建立)数据库

III.  指定(建立)集合

IV.   插入数据

V.    查询

VI.   计数

VII.  排序

VIII. 去重

IX.   偏移、限制元素个数

X.    更新

XI.   删除

I. 初始化连接对象

import pymongo

client1 = pymongo.MongoClient(host='localhost',port=27017)  
#调用pymongo的MongoClient()方法初始化一个MongoClient连接对象

client2 = pymongo.MongoClient()
# 如果MongoDB是运行在本机计算机上的, 而且没有修改端口或添加用户名及密码, 
# 初始化的时候就不需要添加参数

client3 = pymongo.MongoClient('mongodb://localhost:27017')
# 如果MongoDB是运行在其他服务器上面的,就需要使用MongoDB URL:
# mongodb://用户名:密码@服务器IP或域名:端口
# 如果没有权限验证, 写作 "mongodb://服务器IP或域名:端口" 这样的形式即可

print(type(client2))  # <class 'pymongo.mongo_client.MongoClient'>

II. 指定(建立)数据库

#方法1
db1 = client.test  # 'test'即为数据库的名称
 
#方法2
db2 = client['test'] # 'test'即为数据库的名称
                     # 方括号中除了填写字符串外, 还可以写保存了字符串的变量名

III. 指定(建立)集合

MongoDB的每个数据库又包含许多集合(collection),类似于关系型数据库中的表

#方法1
collection1 = db.students  # 'students'即为集合的名称
 
#方法2
clllection2 = db['students']  # 'students'即为集合的名称
                              # 方括号中除了填写字符串外, 还可以写保存了字符串的变量名

IV. 插入数据

insert_one() 插入单条记录

insert_many() 插入多条记录

3bd546dd157a9425b97da9b46184ce70.png

在MongoDB中,每条数据都有一个_id属性来唯一标识,如果没有显式指明,MongoDB会自动产生一个ObjectId类型的_id属性值,它是在数据被插入到MongoDB的瞬间,通过一定的算法计算出来的。因此,_id这一列就代表了数据插入的时间,它不重复,而且始终递增。通过一定的算法,可以把ObjectId反向恢复为时间。

d75ffa7f4d8e94b1ad85fc9dd6022e8b.png

insert_one()方法返回一个InsertOneResult对象,对其调用inserted_id属性即可获得_id属性的属性值;insert_many()方法返回一个InsertManyResult对象,对其调用inserted_ids属性即可获得插入数据的_id列表

V. 查询

find_one()

5e037215370eeea32d0a2fa3f20dafb6.png

127954fbe2e07e9cf1df3ff91c9e2aa9.png

c8e4301fdae40da5adfe45a14de962df.png

find()

f5659fd09829a90d1fd0fdc42f023493.png

9ca7cd5f2c1f961ec5014ddd96ed39e1.png

find()方法中不填'filter'参数表示获取所有document

bbba275a71d5eff71b995c9a6de01807.png

查询20<age<22的所有记录,显示除_id字段外的所有字段

2d58944eb1e8807747f37c05458ff1b2.png

比较符号大全:

5cdab7ad3469f09bfe4fb0376e7ca3ae.png

功能符号大全:

a6b527736331d35081332435a8473987.png

VI. 计数

b195485d9fd3b8f1581aa88a3e4fee6e.png

统计(符合条件的)查询结果有多少条数据,用count_documents()方法

7ea55d2552bae077501f9f3bf285713d.png

VII. 排序

sort()方法可以对查询到的结果进行排序,常和find()方法搭配在一起使用

da2de62ec2796b425630b1b00b071aa4.png

sort(要排序的字段,pymongo.ASCENDING/pymongo.DESCENDING)

d810f60d2c44d2c72f4d642007da37d3.png
默认为升序

25cf59114ffd204bae848f76dcf94a1a.png

pymongo.DESCENDING也可以用-1替代:

0da02c062011e7931cfb34c65698a009.png

VIII. 去重

dec9b1acd122667301470eb9312fd92a.png

b55462917484ce24b5209d05f97a3f13.png

返回的结果是一个列表

如果我们想在插入数据时就进行去重,除了在使用update_one()和update_many()方法时据时指定upsert=True,还可以在一开始为集合创建一个索引,并指定unique=True

40e35c53a51ea4fe4a88d92f0b67c9e1.png

当id重复时,insert_many()语句会报错,所以最好把这部分代码放到try except语句中:

ab8f79fab96fc76b21174c550a968418.png

IX. 偏移、限制元素个数

skip()

ca800455b90d1fb60d742f968a70981f.png

skip()方法,忽略前X个元素,取得第X+1及之后的元素

c75651f786950667bf6173c26e04f787.png
调用skip()后返回的依旧是cursor对象

limit()

ffbed28fcdf6b22a6321a99474ccc567.png

limit()方法,指定要取的结果数量

4fac75f6f39c90e57b793ca76b372808.png

两者也可以组合使用:

67f39540e50b807632add2e93f6c76f0.png

X. 更新

  • update_one()方法
  • update_many()方法

36fb43505a3b47b498835ec7f0047644.png

3453ab7cb64830a22a34b7d2250b2d48.png

276d48baba05f67fce631736fa3589aa.png

f483de5b0210d3c8cc4c88f6726ab49e.png

update_one()方法和update_many()方法的API一致,前者只更新一条信息,后者更新所有符合要求的信息。API中我们主要用到 'filter 和 'update', 'filter'用来过滤我们想要更新的document, ‘update'是具体的更新操作

ecd4e032384d931b435b86c07af6c9d4.png

更新条件为{'inc':{'age':1}},也就是年龄加1

除 'filter 和 'update'外,最常用的参数是'upsert',其实看到名字,我们就大概可以猜到它的意思:在不满足筛选条件的时候进行插入,在满足筛选条件时进行更新. 这其实是另一种形式的去重

cfe0f33c59209b162da10068c63e3094.png

XI. 删除

2adaaab48f2a7979fe7018c8e241bb4f.png

db6cbcf64bf1591d6dd7e82582278491.png
  • delete_one()方法,删除第一条符合条件的数据,可以调用deleted_count属性获得删除的数据条数
  • delete_many()方法,删除所有符合条件的数据,可以调用deleted_count属性获得删除的数据条数

8efaae3665d5b2b6fa820a8b271d6810.png

MongoDB官方文档在此:

Query and Projection Operators​docs.mongodb.com
71d7bb16d7f177e521a167be930bc942.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值