Python下MongoDB的简单应用

1.傻瓜安装失败请看下面方法

1.mongodb下载zip文件
2.解压到D或者E盘
3.创建mangodb文件夹,把mongodb自创建文件夹中的所有文件剪切到mongodb
4.此时目录结构D|E:mongodbin等等文件
5.在D|E:mongodb目录下创建data和log文件夹,并在log中创建文件mongod.log
6.在D|E:mongodb目录下创建mongod.cfg文件,添加路径:dbpath=D|E:mongodbdata
                                logpath=D|E:mongodblogmongod.log
7.添加环境变量,在系统变量(S)Path中添加路径D|E:mongodbin
8.系统管理员身份运行cmd,mongod --config "D|E:mongodbmongod.cfg" --install
9.开启服务   net start mongodb
View Code

2.MongoDB简介和pymongo连接的两种方法

"""
非关系型数据库简介
1.键值存储数据库:Redis、Oracle BDB、Voldemort等
2.列存储数据库:HBase、Cassandra、Riak等
3.文档型数据库:MongoDB、CouchDB等
4.图形数据库:Neo4J、InfoGrid等
***开始学习MongoDB的使用***
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,
其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活
http://api.mongodb.com/python/current/api/pymongo/collection.html 官方手册
"""
import pymongo


# 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
client = pymongo.MongoClient(host="localhost", port=27017)
# 一样的连接方式和连接类型
print(client)
# <class 'pymongo.mongo_client.MongoClient'>    生成数据库连接实例
print(type(client))
# 选择一个指定的数据库
db = client.demo1
print(db)
# <class 'pymongo.database.Database'>   声明了一个Database对象
print(type(db))
# MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
collection = db.students
print(collection)
# <class 'pymongo.collection.Collection'> 声明了一个Collection对象
print(type(collection))


# 第二种连接方式,直接传入MongoDB的连接字符串
conn = pymongo.MongoClient("mongodb://localhost:27017/")
# 一样的连接方式和连接类型
print(conn)
print(type(conn))
# 选择一个指定的数据库
db2 = conn["demo2"]
print(db2)
print(type(db2))
# MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
collection2 = db2["students"]
print(collection2)
print(type(collection2))
View Code

3.插入数据的两种方法

"""mongodb的数据插入"""
import pymongo


# 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
client = pymongo.MongoClient(host="localhost", port=27017)
# 选择一个指定的数据库
db = client.demo
# MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
collection = db.students
# 创建一条字典形式的数据
student = {
    "id": "20190120",
    "name": "BangYu",
    "age": 21,
    "gender": "male"
}
# 调用对象Collection对象的insert方法插入数据并获取返回插入数据的id
result = collection.insert(student)
# 打印插入数据的id值
print(result)
# 插入多条数据则需要以列表的形式传递
res = collection.insert([
    {"username": "aaa", "age": 18},
    {"username": "bbb", "age": 20}
])
print(res)
##############上面是第一种插入数据的方法############################

# 第二种插入数据的方法insert_one()和insert_many()
# 创建一条字典形式的数据
people = {
    "id": "20190121",
    "name": "DangYu",
    "age": 22,
    "gender": "male"
}
# 插入一条数据
obj = collection.insert_one(people)
# 返回一个InsertOneResult对象
from pymongo.results import InsertOneResult
print(obj)
# 调用这个对象的inserted_id()方法
print(obj.inserted_id)

# 插入多条数据
objs = collection.insert_many([
    {"username": "ccc", "age": 19},
    {"username": "ddd", "age": 23}
])
# 返回一个InsertManyResult对象
print(objs)
# 调用这个对象的inserted_ids()方法
print(objs.inserted_ids)
View Code

4.删除数据的两种方法

"""mongodb删除数据"""
import pymongo


# 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
client = pymongo.MongoClient(host="localhost", port=27017)
# 选择一个指定的数据库
db = client.demo
# MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
collection = db.students

# 删除所有符合条件的数据
remove = collection.remove({"username": "aaa"})
# {'n': 5, 'ok': 1.0}   删除5条,删除完成
print(remove)

# 推荐删除方法delete_one()和delete_many()
one = collection.delete_one({"username": "ddd"})
# 删除第一条指定的数据
print(one)
from pymongo.results import DeleteResult
# 调用DeleteResult对象的deleted_count属性获取删除的数据条数
print(one.deleted_count)
many = collection.delete_many({"username": {"$regex": "bbb"}})
# 删除正则匹配到的所有数据
print(many.deleted_count)
View Code

5.更新数据的两种方法

"""mongodb的数据更新操作"""
import pymongo


# 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
client = pymongo.MongoClient(host="localhost", port=27017)
# 选择一个指定的数据库
db = client.demo
# MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
collection = db.students

# 指定查询的条件
condition = {"name": "YangYu"}
# 查找第一条符合条件的数据
user = collection.find_one(condition)
# 修改年龄
user["age"] = 26
# 调用update()方法将原条件和修改后的数据传入
response = collection.update(condition, user)
# {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
# n表示一条数据,nModified表示影响的数据一条,ok表示成功,最后修改的属性存在
print(response)
# 也可以使用$set操作符进行更新
result = collection.update(condition, {"$set": user})
# 一样的返回结果
print(result)

# 推荐使用方法update_one()和update_many()
term = {"age": {"$gt": 20}}
# 查询年龄大于20岁的第一条数据并增加年龄1
one = collection.update_one(term, {"$inc": {"age": 1}})
print(one)
from pymongo.results import UpdateResult
# 打印匹配的查询数据条数和受影响的数据
print(one.matched_count, one.modified_count)

# 查询所有与条件匹配的数据并增加年龄1
many = collection.update_many(term, {"$inc": {"age": 1}})
print(many)
# 打印匹配的所有查询结果、查询数据条数和受影响的数据
print(many.raw_result, many.matched_count, many.modified_count)
View Code

6.数据查询的多种方式

"""mongodb的数据查询"""
import pymongo


# 连接mongodb数据库传入参数地址、端口。也可以不传,使用默认值
client = pymongo.MongoClient(host="localhost", port=27017)
# 选择一个指定的数据库
db = client.demo
# MongoDB每个数据库又包含许多集合collection,它类似于关系型数据库中的表.指定一个集合
collection = db.students

# 查询单个结果
res = collection.find_one({"username": "aaa"})
# 返回字典形式类型
print(type(res))
# {'_id': ObjectId('5c44515990ba093678011922'), 'username': 'aaa', 'age': 18}
# 多了_id属性,是mongodb在插入数据的时候自动添加的属性
print(res)

# _id属性查询。需要使用bson库中的ObjectId类。数据量特别大时建议使用此方法
from bson.objectid import ObjectId
# 获取查询的返回数据结果。如果查询的数据不存在则返回None
obj = collection.find_one({"_id": ObjectId('5c44515990ba093678011922')})
# 一样的查询结果
print(obj)

# 查询多条数据
objs = collection.find({"age": 18})
print(objs)
# <class 'pymongo.cursor.Cursor'>   Cursor类型相当于一个生成器
from pymongo.cursor import Cursor
print(type(objs))
# 遍历获取所有结果。每个都是字典类型
for row in objs:
    print(row)

# 条件查询。查询年龄大于18的所有结果
results = collection.find({"age": {"$gt": 18}})
for res in results:
    print(res)
"""
***********比较符号*************
$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]}} 
"""

# 功能查询。正则匹配查询名字以Y开头的数据
response = collection.find({"name": {"$regex": "^Y.*"}})
for rew in response:
    print(rew)
"""
***********功能符号*************
$regex      匹配正则表达式     {'name': {"$regex": "^Y.*"}}    name以Y开头
$exists     属性是否存在       {'name': {'$exists': True}}     name属性存在
$type       类型判断           {'age': {'$type': 'int'}}      age的类型为int
$mad        数字模操作         {'age': {'$mad': [5, 0]}}      年龄模5余0
$text       文本查询           {'$text': {'$search': 'yang'}}  text类型的属性中包含yang字符串
$where      高级条件查询       {'$where': obj.id == obj.sid_count'} 自身id数等于学号数
https://docs.mongodb.com/manual/    官方参考手册
"""

# 计数。先查询符合条件的结果再调用count()方法统计所有数据条数
count = collection.find({"name": {"$regex": "^Y.*"}}).count()
print(count)

# 排序。使用ASCII码排序。ctrl+b进入可选择多种排序方式
outcome = collection.find().sort("name", pymongo.ASCENDING)
# 使用列表解析查看已排序的数据结果
print([out["name"] for out in outcome])

# 偏移。Cursor类下的方法skip()偏移位置.
skips = collection.find().sort("name", pymongo.ASCENDING).skip(2)
# 忽略前两个元素,得到第三个及以后的所有元素
print([skip["name"] for skip in skips])
# limit()方法获取指定的结果个数。
limits = collection.find().sort("name", pymongo.ASCENDING).skip(2).limit(3)
print([limit["name"] for limit in limits])
View Code

7.扩展的几种方法

"""mongodb扩展
find_one_and_delete()       查找后删除
find_one_and_replace()      查找后替换
find_one_and_update()       查找后更新
create_index()              在此集合上创建索引
create_indexes()            在此集合上创建一个或多个索引
drop_index()                删除此集合上的指定索引
"""
原文地址:https://www.cnblogs.com/Guishuzhe/p/9845886.html