MongoDB系列2-基本操作

2021-03-01 15:30:54 浏览数 (1)

MongoDB系列2-基本操作

介绍MongoDB的基本操作,包含以下几个方面,在爬虫中使用最多的是往MOngoDB中插入数据

  • 增:insert()
  • 查:find()
  • 逻辑查询
  • 结果排序-sort
  • 更新-update
  • 删除-delete
  • 去重-distinct

增加

插入操作使用的是insert,参数是Python的字典类型数据

代码语言:javascript复制
from pymongo import MongoClient
client = MongoClient()
database = client["Chapter6"]   # Chapter6集合名字
collection = db1["spider"]  # spider库的名字

# 单条插入
data = {"id":123,"name":"xiaoming","age":20}
collection.insert(data)  # 插入数据

# 批量插入
more_data = [{"id":123,"name":"xiaoming","age":20,"salary":2000},
             {"id":124,"name":"yangming","age":22,"salary":2400},
             {"id":125,"name":"zhaofeng","age":28,"salary":2600}
            ]   # 数据放入列表中
collectino.insert(more_data)

爬虫中主要用MongoDB来存储数据,用的就是insert方法

查找-find

查找数据使用的方法是find

代码语言:javascript复制
find(查询条件,返回字段)  # 多条信息
find_one(查询条件,返回字段)  # 只返回一条信息

参数都是字典类型,可以省略;爬虫中用的多的是find()方法,例如:

代码语言:javascript复制
# 情形1
content = collection.find()  # 返回的是全部内容

content = collection.find({'age':20},   # 查询age=20的人
                          {'_id':0,'name':1,"salary":1}  # 限定返回的字段信息:0表示不返回,1表示返回
                         )
  • 第二个参数指定返回的内容:0表示不返回,1表示返回
  • _id必须人工指定其值0,才不会返回;其他数据统一返回,或者统一不返回
  • find()方法返回的是可迭代的PyMongo对象,可以被for循环展开,展开得到字典,字典对应的是每条记录
代码语言:javascript复制
content = [x for x in collection.find({'age':20},{'_id':0,'name':1,"salary":1})]

逻辑查询

PyMongo也支持大于、小于、大于等于等逻辑查询,见表格:

使用方法:

  • 指定字段
  • 指定查询范围,范围也是字典的形式
代码语言:javascript复制
collection.find({'age':{'$gt':29}})
collection.find({'age':{'$gte':29},'$lte':40})

结果排序-sort

将结果查询find出来之后可以通过sort方法进行排序,两个参数:

  • 指定的字段
  • -1表示降序,1表示升序
代码语言:javascript复制
collection.find().sort('列名',1或-1)

使用的案例:

代码语言:javascript复制
collection.find({'age':{'$gte':29,'$lte':40}}).sort('age',-1)  # 先查询,再降序排列

更新-udpate

更新数据的两个方法:

代码语言:javascript复制
collection.update_one(参数1,参数2)  # 更新一条
collection.update_many(参数1,参数2)  # 更新多条

两个参数都是字典,且都不能省略

两个参数都是字典,且都不能省略

两个参数都是字典,且都不能省略

使用的案列如下:

代码语言:javascript复制
collection.update_one({'age':20},  # 将第一个年龄为20的人的名字改为xiaoming
                      {'$set':{'name':'xiaoming'}}
                     )

collection.update_many({'age':20},  # 将全部年龄为20的人的名字改为xiaoming
                      {'$set':{'name':'xiaoming'}}
                     )

删除-delete

删除数据的两种方法:

  • delete_one():删除一条
  • delete_many():删除多条

参数都是字典,不建议省略

代码语言:javascript复制
collection.delete_one({'age':20})  # 删除一条
collection.delete_many({'age':20})  # 删除多条

结果去重-distinct

去重使用的是distinct()方法

代码语言:javascript复制
collection.distinct('字段名称')

0 人点赞