1.傻瓜安装失败请看下面方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
2.MongoDB简介和pymongo连接的两种方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
""" 非关系型数据库简介 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))
3.插入数据的两种方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""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)
4.删除数据的两种方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""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)
5.更新数据的两种方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""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)
6.数据查询的多种方式
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
"""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])
7.扩展的几种方法
"""mongodb扩展 find_one_and_delete() 查找后删除 find_one_and_replace() 查找后替换 find_one_and_update() 查找后更新 create_index() 在此集合上创建索引 create_indexes() 在此集合上创建一个或多个索引 drop_index() 删除此集合上的指定索引 """