pymongo学习笔记

MongoDB基本概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvXoHW0X-1573371515181)(images/image-20191110140602039.png)]
在这里插入图片描述

连接数据库

#########  方法一  ##########
import pymongo
# MongoClient()返回一个mongodb的连接对象client
client = pymongo.MongoClient(host="localhost",port=27017)

#########  方法二  ##########
import pymongo
# MongoClient的第一个参数host还可以直接传MongoDB的连接字符串,以mongodb开头
client = pymongo.MongoClient(host="mongodb://127.0.0.1:27017/")

创建/指定数据库

######  方法一  ######
# 指定test数据库
db = client.test

######  方法二  ######
# 指定test数据库(调用client的test属性即可返回test数据库)
db = client["test"]

查看数据库

client.list_database_names()

['local', 'test', 'admin', 'medical']

指定/插入集合

######  方法一  ######
# 指定student集合
collection = db.student

######  方法二  ######
# 指定student集合
collection = db["student"]

增:插入文档/数据

pymongo 3.x版本中,insert()方法官方已不推荐使用,推荐使用**insert_one()insert_many()**将插入单条和多条记录分开。

  • db.collection.insert_one()
    用于插入单条记录,返回的是InsertOneResult对象
student = {
 'name': 'Jordan',
 'age': 18,
 'gender': 'man'
}

result = collection.insert_one(student)
# insert_one()返回的是InsertOneResult对象,我们可以调用其inserted_id属性获取_id。
print(result)  # <pymongo.results.InsertOneResult object at 0x10d68b558>
print(result.inserted_id) # 5932ab0f15c2606f0c1cf6c5
  • db.collection.insert_many()
    用于插入多条记录,返回的是InsertManyResult对象

student1 = {
 'name': 'Jordan',
 'age': 10,
 'gender': 'man'
}

student2 = {
 'name': 'Mike',
 'age': 11,
 'gender': 'man'
}

result = collection.insert_many([student1, student2])
# insert_many()方法返回的类型是InsertManyResult,调用inserted_ids属性可以获取插入数据的_id列表
print(result)  # <pymongo.results.InsertManyResult object at 0x101dea558>
print(result.inserted_ids) # [ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')]

查 : 查询数据

查找全部数据 find()

collection.find() #<pymongo.cursor.Cursor at 0x7fdc2bf4ac50>  返回一个对象

for i in collection.find():
    print (i)
    
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

results = collection.find({"age":18})
print(results) # <pymongo.cursor.Cursor object at 0x1032d5128>
for result in results:
      print(result)
        
# <pymongo.cursor.Cursor object at 0x7fdc28a2ac50>
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}        

查询单个数据 find_one()

collection.find_one({'name':'Mike'})

# 结果
{'_id': ObjectId('5dc7a808f971b26b5833f456'),
 'name': 'Mike',
 'age': 11,
 'gender': 'man'}

查询条件

在这里插入图片描述
在这里插入图片描述

# age大于10岁的 
for i in collection.find({'age':{'$gt':10}}):
    print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

# 注意 $get 上要加引号

多条件查询

多条件查询 $and $or

## and查询
res = collection.find({'age':{'$gt':10}} , {'gender' : 'man'})
for i in res:
    print (i)
    #{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'gender': 'man'}
	#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'gender': 'man'}
    
## or查询
res = collection.find({
    '$or':[{'age':{'$gt':10}} , {'gender' : 'man'}]
})
for i in res:
    print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}

获取文档个数 count()

collection.find().count()

3

排序 sort()

排序 sort()
调用sort方法,传入要排序的字段and升降序标志即可

# 默认升序
res = collection.find().sort('age',pymongo.ASCENDING)
for i in res:
    print (i)
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}


# 降序
res = collection.find().sort('age',pymongo.DESCENDING)
for i in res:
    print (i)
#{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 11, 'gender': 'man'}
#{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}   
    

skip

跳过查询的记录

# 查询全部
results = collection.find().sort('name', pymongo.ASCENDING)
print ([result['name'] for result in results])
#['Jordan', 'Jordan', 'Mike']

# skip(2)
results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
print ([result['name'] for result in results])
['Mike']

**注意:*在数据量非常庞大时(千万、亿级别),最好不要用skip()来查询数据,可能导致内存溢出。可以使用
find({'_id': {'$gt': ObjectId('593278c815c2602678bb2b8d')}})
这样的方法来查询。

limit()

读取指定数量的数据记录

results = collection.find().sort('name', pymongo.ASCENDING).limit(1)
print([result['name'] for result in results])
# ['Jordan']

改 : 更新数据

  • db.collection.update_one()
    修改单条文档,返回结果是UpdateResult类型
result = collection.update_one(
              {"name" : "Mike"} , 
              {
                "$inc" : {"age" : 5}, 
                "$set": {"gender": "male"}
              }
)
print(result)   # <pymongo.results.UpdateResult object at 0x10d17b678>

print(result.matched_count, result.modified_count)   # 1  1


collection.update_one({'name':'Mike'},
                      {'$set':{'gender':'qqq'}})

for i in collection.find():
    print (i)
    
{'_id': ObjectId('5dc7a74df971b26b5833f454'), 'name': 'Jordan', 'age': 18, 'gender': 'man'}
{'_id': ObjectId('5dc7a808f971b26b5833f455'), 'name': 'Jordan', 'age': 10, 'gender': 'man'}
{'_id': ObjectId('5dc7a808f971b26b5833f456'), 'name': 'Mike', 'age': 21, 'gender': 'qqq'}
 

$inc

  1. 使用$inc操作符将一个字段的值增加或者减少的格式是 :

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

  1. $inc操作符接收正的和负的值

​ 如果指定的字段不存在则$inc操作符创建这个字段并且设置这个字段的值为指定的在值 ,存在则不变

$set用于更新

update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()

方法一样

删: 删除数据

删除全部

collection.remove()
# {'ok': 1, 'n': 3}

删除一条

result = collection.delete_one({'name': 'Kevin'})
print(result) # <pymongo.results.DeleteResult object at 0x10e6ba4c8>
print(result.deleted_count)  # 1

删除多条

result = collection.delete_many({'name': 'Kevin'})
print(result) # <pymongo.results.DeleteResult object at 0x55e6be5f1>
print(result.deleted_count)  # 4

删除集合

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mycol.drop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值