最近使用python爬虫,使用的是mongodb,经常需要通过python代码操作mongodb,记录一下,方便以后查找。
一、准备工作
1、安装mongodb
下载地址:https://www.mongodb.com/download-center/community
安装过程就不写了,可以参考这个http://www.runoob.com/mongodb/mongodb-window-install.html
2、安装python中MongoDB的驱动程序
pip install pymongo |
3、启动mongodb服务
二、连接Mongodb
import pymongo |
1、连接MongoDB
conn = pymongo.MongoClient('localhost', 27017) |
2、新建一个数据库,或者使用某个数据库
my_db = conn["test_db"] |
3、新建一个集合,或者使用数据库中的某个集合
my_collection = my_db["test_collection"] |
三、添加数据
插入一条数据
data1 = { |
注:插入的数据必须是字典格式
插入多条数据
data1 = { |
四、查询数据
查询所有数据
例子:查询my_collection集合所有数据
result = my_collection.find() |
注:查询结果为字典集合
查询一条数据
例子:查询my_collection集合中“name”为”zhangsan”的第一条数据
result = my_collection.find_one({'name': ‘zhangsan’}) |
注:查询结果为字典对象
查询多条数据
例子:查询my_collection集合中“age”为10的所有数据
result = my_collection.find({'age':10}) |
注: 查询结果为字典集合
条件查询
符号 | 含义 | 示例 |
---|---|---|
$lt | 小于 | {‘age’: {‘$lt’: 20}} |
$gt | 大于 | {‘age’: {‘$gt’: 20}} |
$lte | 小于等于 | {‘age’: {‘$lte’: 20}} |
$gte | 大于等于 | {‘age’: {‘$gte’: 20}} |
$ne | 不等于 | {‘age’: {‘$ne’: 20}} |
$in | 在范围内 | |
$nin | 不在范围内 |
例子:查询my_collection集合中“age”大于10的所有数据
result = my_collection.find({'age': {'$gt': 10}}) |
注: 查询结果为字典集合
或
例子:查询my_collection集合中“age”为20或者35的所有数据
result = my_collection.find({"$or":[{"age":20},{"age":35}]}) |
与
例子:查询my_collection集合中“name”为”zhangsan”并且“age”为35的所有数据
result = my_collection.find({"$and":[{"name":"zhangsan"},{"age":35}]}) |
使用正则表达式查询
例子:查询my_collection集合中“name”中第一个字母为“z”的所有数据
myquery = { "name": { "$regex": "^z" } } |
查询结果为字典集合
返回指定条数记录
如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。
result = my_collection.find().limit(3) |
五、修改数据
修改一条数据
例子:将my_collection集合中“name”为“zhangsan”的第一条数据的年龄修改为50
myquery = { "name": "zhangsan" }
newvalues = { "$set": { "age": 50 } }
my_collection.update_one(myquery, newvalues)
修改多条数据
例子:将my_collection集合中“name”为“lisi”的所有数据的年龄修改为50
myquery = { "name": "lisi" }
newvalues = { "$set": { "age": 50 } }
my_collection.update_many(myquery, newvalues)
六、删除数据
删除一条数据
例子:删除集合中”name”为“lisi”的第一条数据
myquery = { "name": "lisi" }
my_collection.delete_one(myquery)
删除多条数据
例子:删除集合中”age”为10的所有数据
myquery = { "age": 10 } |
删除所有数据
例子:删除集合中所有数据
my_collection.delete_many({})
或者
my_collection.remove() |
删除集合
mycol.drop()
mycol.drop() |
七、数据排序
sort() 方法可以指定升序或降序排序。
sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
例子:将my_collection集合中的数据安装年龄升序排序
result = my_collection.find().sort("age",-1) |
八、其他
跳过指定数量的数据
例子:跳过10条数据后,取10条数据
result = my_collection.find().skip(10).limit(10) |
注:常用作分页