您的位置:首页 > 数据库 > Mongodb

[每日一题]21、Python操作MongoDB

2019-08-09 09:02 225 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_43499626/article/details/98960559

点击上方“Python3X”,选择“置顶或者星标”第一时间收到精彩推送!
Python Every Day, 第 21 天

    在每日一题第20期中写了Python操作MySQL,群里的小伙伴让分享一下Mongo的用法。


Mongo是非关系型数据库中的主要代表之一。

关系型数据库和非关系型数据库最主要的区别在于
  • 关系型数据库:采用关系模型来组织数据结构,比如我们使用MySQL的时候需要先设计表结构,确定字段值。

  • 非关系型数据库:使用键值对进行存储,不需要提前设定好字段。读写性能相对较高。



下图为我在终端查看本地的测试数据。可以看到查询出来的数据就是 键值对的形式。 具体安装MongoDB的方法可根据不同的操作系统自行谷歌进行安装配置。



{    "_id": ObjectId("5ccd76c0dfe2aa0c8c626466"),    "name": "颐和园",    "address": "北京市海淀区新建宫门路19号",    "count": 594,    "point": "116.276887,39.999497",    "city": "北京"}"_id": ObjectId("5ccd76c0dfe2aa0c8c626466"),
    "name": "颐和园",
    "address": "北京市海淀区新建宫门路19号",
    "count": 594,
    "point": "116.276887,39.999497",
    "city": "北京"
}


用Python操作Mongo需要安装PyMongo库

pip3 install pymongo


每条数据其实都有一个_id属性来唯一标识,如果不手动指定,会自动生成一个Object类型的id


Mongo的用法有很多,除了基础的CURD,还有很多复杂的查询。本文只是简单的演示一下增删改查


通过pymongo的MongoClient来创建链接Mongo的服务


新增插入


import pymongo# 通过pymongo库中的MongoClient,创建mongo连接服务,参数host和端口port 默认27017client = pymongo.MongoClient(host='127.0.0.1', port=27017)# 也可以写成这样#client = pymongo.MongoClient('mongodb://localhost:27017')# 指定数据库 python3x# db = client['python3x']db = client.python3x# 指定集合temp(collection), 也可以理解为表,col = db.temp  # db['temp']  两种方式都可以# 插入一条result = col
7ff7
.insert({    'name': 'tom',    'age': 19,    'skill': ['python', 'javascript']})# 返回插入的id  5d4bf9288c112fd7721d7f8cprint('插入完成', result)# 可以多条插入, 返回_id列表 [ObjectId('5d4bf9288c112fd7721d7f8d'), ObjectId('5d4bf9288c112fd7721d7f8e')]result = col.insert([{'name': 'lily'}, {'name': 'liming'}])print(result)# 插入单条数据 推荐使用 insert_oneresult = col.insert_one({    '_id': 1,    'name': 'python3x',    'skill': ['java', 'python', 'javascript'],    'sex': '1'})print('insert_one :', result)# 插入多条数据,官方推荐使用insert_manyresult = col.insert_many([    {        '_id': 2,        'name': '小a'    },    {        '_id': 3,        'name': '小b'    }])print('insert_many: ', result)


# 通过pymongo库中的MongoClient,创建mongo连接服务,参数host和端口port 默认27017
client = pymongo.MongoClient(host='127.0.0.1', port=27017)

# 也可以写成这样
#client = pymongo.MongoClient('mongodb://localhost:27017')

# 指定数据库 python3x
# db = client['python3x']
db = client.python3x

# 指定集合temp(collection), 也可以理解为表,
col = db.temp  # db['temp']  两种方式都可以


# 插入一条
result = col.insert({
    'name': 'tom',
    'age': 19,
    'skill': ['python', 'javascript']
})

# 返回插入的id  5d4bf9288c112fd7721d7f8c
print('插入完成', result)

# 可以多条插入, 返回_id列表 [ObjectId('5d4bf9288c112fd7721d7f8d'), ObjectId('5d4bf9288c112fd7721d7f8e')]
result = col.insert([{'name': 'lily'}, {'name': 'liming'}])
print(result)

# 插入单条数据 推荐使用 insert_one
result = col.insert_one({
    '_id': 1,
    'name': 'python3x',
    'skill': ['java', 'python', 'javascript'],
    'sex': '1'
})

print('insert_one :', result)


# 插入多条数据,官方推荐使用insert_many
result = col.insert_many([
    {
        '_id': 2,
        'name': '小a'
    },
    {
        '_id': 3,
        'name': '小b'
    }
])
print('insert_many: ', result)

可以通过robo 3T 可视化工具查看数据,部分截图:

可以看出数据并不是什么结构数据,只是一个字典格式。字段可以随便定义,并不需要像MySQL那样之前设计好。


查找:
可以通过find(), find_one()对数据进行查询


# 查找name 为lily的数据result = col.find_one({'name': 'lily'})print(result)  # {'_id': ObjectId('5d4bf9288c112fd7721d7f8d'), 'name': 'lily'}print(result['_id']) # 5d4bf9288c112fd7721d7f8d# 查找所有age 大于18的数据result = col.find({'age': {'$gt': 18}})for i in result:    print(i) # {'_id': ObjectId('5d4bf833037b3139d69cea25'), 'name': 'tom', 'age': 19, 'skill': ['python', 'javascript']}# 查找age 大于等于18的信息条数count = col.count({'age': {'$gte': 18}})print(count)
result = col.find_one({'name': 'lily'})
print(result)  # {'_id': ObjectId('5d4bf9288c112fd7721d7f8d'), 'name': 'lily'}
print(result['_id']) # 5d4bf9288c112fd7721d7f8d

# 查找所有age 大于18的数据
result = col.find({'age': {'$gt': 18}})
for i in result:
    print(i) # {'_id': ObjectId('5d4bf833037b3139d69cea25'), 'name': 'tom', 'age': 19, 'skill': ['python', 'javascript']}

# 查找age 大于等于18的信息条数
count = col.count({'age': {'$gte': 18}})
print(count)

在Mongo中有如下常用的操作符,用于比较或者范围查找


  • $lt    小于    {'age': {'$lt': 20}}

  • $gt    大于    {'age': {'$gt': 20}}

  • $lte    小于等于    {'age': {'$lte': 20}}

  • $gte    大于等于    {'age': {'$gte': 20}}

  • $ne    不等于    {'age': {'$ne': 20}}

  • $in    在范围内    {'age': {'$in': [20, 23]}}

  • $nin    不在范围内    {'age': {'$nin': [20, 23]}}



更新操作


update({ 查询语句},{‘$set’: {'要更新的字段' : 要更新的值}})


# 将name 为tom的数据的年龄更新为23col.update({'name': 'tom'}, {'$set': {'age': 23}})
# 再次查找,发现age已经被更新
result = col.find_one({'name': 'tom'})print(result) # {'_id': ObjectId('5d4bf833037b3139d69cea25'), 'name': 'tom', 'age': 23, 'skill': ['python', 'javascript']}'tom'})
print(result) # {'_id': ObjectId('5d4bf833037b3139d69cea25'), 'name': 'tom', 'age': 23, 'skill': ['python', 'javascript']}


删除:可以通过remove方法进行删除


# 删除name 为tom的信息col.remove({'name': 'tom'})result = col.find_one({'name': 'tom'})print(result) # None
col.remove({'name': 'tom'})

result = col.find_one({'name': 'tom'})
print(result) # None


本文只是介绍了基础的操作,如果需要进一步学习可以查看官方文档https://docs.mongodb.com/manual/   (点击阅读原文直达)
以上,便是今天的分享,希望大家喜欢,觉得内容不错的,欢迎点击「在看」支持,谢谢各位。
如需查看更多[Python Every Day]系列,请点击我的主页的【每日一题】菜单。



感谢您的阅读

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: