前言:工欲善其事必先利其器,用pymongo库之前,大家需首先对MongoDB数据库的增删改查操作有一些基础方法的了解。 我们在这里使用linux上的ipython交互环境来pymongo库的知识点系统性讲解。 一:如何用python连接MongoDB数据库?1.1、使用MongoClient()方法建立连接 import pandas as pd host:指定地址 localhost:XXX.XX.X.XXX port:指定端口 27017 把创立好的MongoDB的连接对象赋值为client 1.2、使用URL建立连接 另外MongoClient的第一个参数host还可以直接传MongoDB的连接字符串,以mongodb开头,例如:
1.3 指定数据库 MongoDB中有许许多多个生产库,我们需要指定具体操作的数据库。 我们调用client的test属性即可返回test数据库 db = client.test 或者
1.4 指定集合 MongoDB的每个数据库又包含了许多集合Collection,也就类似与关系型数据库中的表,用show tables命令可以查看数据库中的各个集合名称。下一步我们需要指定要操作的集合,在这里我们指定一个集合名称为mygirlfriend(女朋友集合),指定集合也有两种方式。 指定集合方式1 collection = db.mygirlfriend 指定集合方式2
二、如何插入数据?2.1、insert_one()方法插入单条数据 接着,我们来插入数据myboyfriend #对于myboyfriend这个Collection,我们新建一条男朋友数据,以字典的形式表示: 输出插入的文档对应的 _id 值 insert_one()方法返回InsertOneResult对象,该对象包含inserted_id属性,它是插入文档的id值。(在MongoDB中,每条数据其实都有一个_id属性来唯一标识,如果没有显式指明_id,MongoDB会自动产生一个ObjectId类型的_id属性) 2.2、insert_many()方法插入多条数据
输出插入的所有文档对应的 _id 值 print(result1.inserted_ids insert_many()方法返回InsertManyResult对象,该对象包含inserted_ids属性,该属性保存着所有插入文档的id值。 执行完以上查找,我们可以在命令终端,查看mygirlfriend 数据是否已插入:
三、如何查询数据?3.1find_one()方法来查询mygirlfriend集合中的一条数据。 client = MongoClient('XXX.XX.X.XXX',27017) 接着,我们再来根据指定条件查询细分查询 在这里我们查询name为JOSIE的mygirlfriend集合数据,它的返回结果是字典类型,运行结果:
_id属性 ObjectId('5c67c624332d6344f9ce55e4')是MongoDB在插入的过程中自动添加的。 我们也可以直接根据ObjectId来查询name为JOSIE的mygirlfriend集合数据,这里需要使用bson库里面的ObjectId。 from bson.objectid import ObjectId ![]() 3.1find()方法来查询mygirlfriend集合中的多条数据。 Ex:在这里查询mygirlfriend集合中的查找hometown为SHENZHEN的数据
![]() 其返回结果是个Cursor类型!!!(相当于一个生成器) 我们需要把所有的结果遍历取出即可!!! for result in results: ![]() 如果要查询查询mygirlfriend集合中年龄大于24的数据要怎么写呢?
![]() 在这里查询的条件键值已经不是单纯的数字了,而是一个字典,其键名为比较符号$gt,意思是大于,键值为24,这样便可以查询出所有年龄大于24的数据。 在这里将比较符号归纳如下表: 符号含义示例 在这里,我们可以把数据转换成pandas的DataFrame的数据格式打印出来。 result2 = pd.DataFrame(list(result1)) ![]() 四、count()方法计数和sort() 方法排序4.1 要统计查询结果有多少条数据,可以调用count()方法 如统计所有数据条数:
![]() 查询hometown为NEWYORK的数据条数! count = collection.find({'hometown': 'NEWYORK'}).count() ![]() 4.2、sort() 方法排序 sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
![]() 五、偏移和更新操作5.1、偏移 在某些情况下我们可能想取某几个元素可以利用skip()方法偏移几个位置。 例如偏移2,就忽略前2个元素,得到第三个及以后的元素。 results = collection.find().sort('name').skip(2) ![]() 5.2、更新操作 5.2.1、 update_one() 方法修改文档中的记录 第一个参数为查询的条件 第二个参数为要修改的字段,需要使用newvalues = { '$set': { 'name': 'baby' } }这样的形式 如果查找到的匹配数据多余一条,则只会修改第一条。
输出修改后的集合 for x in collection.find(): ![]() 5.2.2、update_many() 方法修改文档中的记录 更改hometown为以 S 开头的文档数据在mygirlfriend集合为hometown为HONGKONG
![]() 查看数据![]() 更新好了之后,我们再来随意查一条数据#花式查询 ![]() 六、如何用pymongo 删除数据?6.1delete_many()方法删除多条文档 删除所有 hometown字段中以 S 开头的文档: delete_many()方法第一个参数为查询对象,指定要删除哪些数据
![]() 以 S 开头的文档数据在mygirlfriend集合已经删除了 在这里使用了$regex来指定正则匹配, 在这里将一些功能符号再归类如下: 符号含义示例示例含义 ![]() 6.2delete_one()方法删除单个文档 以下实例删除 name 字段值为 'ROSE' 的文档: myquery = { 'name': 'ROSE' } ![]() 那么如何删除集合中的所有文档呢?
delete_many()方法如果传入的是一个空的查询对象,则会删除集合中的所有文档: ![]() deleted_count属性获取删除的数据条数 调用db.mygirlfriend.find()方法可以看到数据最后一条数据也被我们删除了,mygirlfriend集合的数据已经被我们删光了。 ![]() 但是这个时候这个集合还是在的 ![]() 接着,我们调用collection.drop()方法即可删除集合。 ![]() 上图可以看到,mygirlfriend集合已经被删除啦! ![]() |
|