pymongo查询列表元素_pymongo相关操作

本文详细介绍了使用Python的pymongo库连接MongoDB数据库,包括创建数据库和集合,插入、查询、更新及删除文档,以及数据聚合操作。重点讲解了find()查询、更新操作符如$set、$inc以及聚合操作$group。
摘要由CSDN通过智能技术生成

导入库,建立连接

a. from pymongo import MongoClient

b. client = MongoClient(host,port)

创建数据库 myDB (应该叫连接数据库,比较创建数据库更合适)

a. db = client['myDB'] 或者

b. db = client.myDB

c. 两者是一个意思,凭喜好选择。注意,第一个【】里面是字符串

d. 如果数据库myDB不存在,则重新创建一个,如果存在,则连接已存在的myDB数据库

建立集合myColletions(相当于sql中的表单)

a. myColl = db['myColletions'] 或者

b. myColl = db.myColletions

c. 两者是一个意思,凭喜好选择。注意,第一个【】里面是字符串

d. 如果集合myColletions不存在,则重新创建一个,如果存在,则连接已存在的myColletions集合

插入文档记录(也就是sql中表单的行记录)

a. 如果插入的集合不存在,则mongoDB自动给你创建一个。

b. myColl.insert_one(BinaryJson) 插入单条数据

i. BinaryJson 可以简单理解为 二进制版的json,

mongoDB自动将json转换我BinaryJson,如无特殊需要插入json即可

ii. 插入一条Json格式的文档,也就是表单行记录

iii. 如果插入的json格式文档中不包括 '_id'字段,则mongoDB,自动创建一个‘_id‘字段,

并生成一个ObjectId,作为_id字段值。

iv. 返回一个 insertOneResult对象,它包括inserted_id属性,

返回一个被插入对象的_id字段值。:

1) result = myColl.insert_one(json)

2) coll_id = result.inserted_id

c. myColl.inssert_many(jsonColletions)插入多条数据

i. 插入一个json文档集合,一般情况下是 列表,列表的每一个元素,必须是一个json格式数据对象

ii. 如果插入的json格式文档中不包括 '_id'字段,则mongoDB,自动创建一个‘_id‘字段,

并生成一个ObjectId,作为_id字段值

iii. 返回一个insertManyResult对象,它包括inserted_ids属性,

返回被插入对象的_id字段值的列表

查询文档记录(sql中的表单查询)

a. 查询所有数据

i. myColl.find() 查询集合中的所有文档记录(表中的行记录)

1) 返回一个查询结果的游标,可迭代对象,就像open(fileName)函数一样

a) result = myColl.find() f = open(fileName)

b) for value in result: for value in f:

c) print value print f

d) 输出每一条文档记录(行记录) 输出每一行内容

2) 相当于 sql中的:

a) select * from myColl

b. 查询限定操作(也就是sql中的 where 语句)

i. myColl.find({'name':'liming'}) 查询集合中 字段 name = liming的记录

1) 注意:括号内部是一个 字典,或者 json格式的数据(其实都一个卵样)

2) 字典 key = 集合内文档的字段,value = 字段的值

3) 相当于sql中:

select *

from myColl

where name = 'liming'

ii. 一些高级操作:

1) 比较操作:

a) 小于比较:

i) myColl.find({'age':{'$lt':30}}

ii) 查询age字段值 小于30的所有文档记录

iii) 注意:括号内是一个 字典

iv) 字典 key = 文档字段,value 是一个字典,其中 key = 比较操作符, value =比较值

v) 相当于sql中:

select *

from myColl

where age < 30

b) 其他比较操作符

$gt 大于

$gte 大于等于

$lt 小于

$lte 小于等于

$ne 不等于

2) 组合查询:

a) 逻辑与 and

i) myColl.find({'name':'liming','age':30})

ii) 查询 name = liming 和 age = 30 的所有文档记录

iii) 注意:括号内是一个字典,两个元素。用 逗号分隔开,key = 字段,value=字段值

iv) 相当于sql:

select *

from myColl

where name = 'liming' and age = 30

b) 逻辑或 or

i) myColl.find({'$or':[{'name':'liming'},{'age':30}]})

ii) 查询name = 'liming' 或 age = 30的所有文档记录

iii) 注意:括号内是一个字典,key = '$or' 逻辑或操作符,value = 一个列表

列表内是两个字典,key = 字段,value=字段值

iv) 相当于sql:

select *

from myColl

where name = 'liming' or age = 30

3) 对查询结果进行排序:

a) myColl.find().sort('name',pymongo.DESCENDING)

i) 对查询结果按照字段 name进行排序,默认为升序,可以指定排序方向,

DESCENDING是降序

ii) 相当于sql:

select *

from myColl

order by name DESC

b) myColl.find().sort([{'name':pymongo.DESEDING',{'age':pymongo.DESEDING'}])

i) 对查询结果排序,指定排序方向为 降序,默认为升序。

先按照name字段排序,在按照age字段排序

ii) 相当于sql:

select *

from myColl

order by name DESC ,age DESC

DESC关键字只适用于 DESC前面的字段,需要的话,可以对每个字段指定一次 DESC

更新数据:

a. 更新指定字段

i. myColl.update_one() 更新一条文档,只更新找到的第一条记录

1) 包含三个参数:

a) 过滤器(筛选器),筛选出符合条件的文档

b) 更新操作

c) 一些相关的更新参数设置

2) myColl.update_one({'age':30},{'$set':{'name':'zhangsan'}},upsert=True)

a) 更新查询出来的符合 age = 30的第一条文档记录,

b) 使用$set操作符 更新字段name 为 ’zhangsan‘

c) upsert = True 表示如果需要更新的字段不存在,

则mongoDB自动创建该包含该字段的文档,并更新该字段

i) 默认为False,表示文档不存在时,不创建新的文档

d) 注意:第二个参数是一个字典

key = $set 更新操作符 value = 需要更新的字段,以及需要更新的值。。

3) 相当于:

update myColl

set name = 'zhangsan'

where age = 30

ii. myColl.update_many() 批量更新一组文档,更新找到的所有记录

1) 使用方法与update_one()一样

2) update_many()更新找到的所有记录,update_one()只更新找到的第一条记录。

清空集合内容(sql中清空表单内容)

a. myColl.delete_one() 删除指定字段文档记录

i. 删除一条记录,值删除找到的第一条记录

ii. myColl.delete_one({'age':30})

1) 删除age = 30 的所找到的第一条记录

iii. 相当于:

delete from myColl

where age = 30

b. myColl.delete_many()

i. 删除找到的所有记录

ii. 使用方法与 delete_one()一样

1) 只是,delete_one()只删除找到的第一条文档记录

2) delete_many()删除找到的所有文档记录

c. myColl.delete_many({})

i. 一次性清空整个集合的所有文档记录

ii. 相当于:

delete from myColl

删除集合(sql中删除表单)

a. myColl.drop()

删除一个集合,彻底的删除,而不是清空

b. 相当于:

i. drop table myColl

数据聚合:

a. 数据的分组,以及统计:

i. 根据一个字段分组文件,并计算总数:

1) myColl.aggregate( [ {'$group' : {'_id' : '$age' , 'count':{'$sum':1} } } ]

对字段age的记录进行分组,并计算age字段相同值的总和

2) 括号里面是个列表

a) 元素是一个字典,key = '$group' 分组操作符

b) value = 一个字典,两个元素。

i) 第一个元素

One. key = '_id' ,这个是固定不变,mongoDB按照id来查找文档

Two. value = '$age' 需要分组的字段,必须以

ii) 第二个元素

One. key = 'count' 设立一个字段别名,来显示统计值

Two. value = '$age' 需要分组的字段,必须以 $ 开头

Three. value =一个字典:

First. key = '$sum' 聚合操作符:计算总和操作

Second. value = 1 表示计算查询到的所有值

3) 相当于:

select age as _id,count(*) as count

from myColl

group by age

ii. 筛选并分组文档:

1) myColl.aggregate([{[{'$match':{'name':'lisi','age':30}},{'$group':{'_id':'$age','count':{'$sum':1}}}])

a) 查询name = 'lisi' and age = 30的文档记录

b) 并对 age字段进行分组,并计算age字段相同值的总和

c) $match 筛选操作符 值为需要筛选的内容

2) 相当于:

select age as _id,count(*) as count

from myColl

group by age

having name = 'list' and age = 30

b. 其聚合操作符:

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值