pymongo库学习
来源:互联网 发布:北京行知小学百度百科 编辑:程序博客网 时间:2024/06/06 02:06
参考资料:pymongo官方Tutorial
安装pymongo
pip install pymongo
连接(Connection)pymongo
有三种连接方式
# 方法一:使用默认值>>> from pymongo import MongoClient>>> client = MongoClient()
# 方法二:指定IP及端口>>> client = MongoClient('localhost', 27017)
# 方法三:以MongDB URI 格式连接>>> client = MongClient('mongdb://localhost:27017/')
统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。
连接数据库(Databse)
# 方式一: 使用attribute style,也就是以"."这种形式>>> db = client.test_database
这种方法对于不符合python命名规则的数据库就无法使用了(如:“test-database”)
# 方式二:使用dictionary style, >>> db = client['test-database']
这种方式就可以解决数据库名称包含特殊符号的问题
连接Collection
和Database连接方式相同
Mongdb中与关系型数据库(如:Mysql、MSSQLServer)中的概念不大相同,这里的collection就是MSSQL中的“表”,所以在本文中都以英文表示
这里可以把Collection理解成“集合”的意思
>>> collection = db.test_collection
>>> collection = db['test-collection']
Documents
document对应着“行”,可以理解为一条记录
准备数据
>>> import datetime>>> post = { "author": "Mike", "text": "My first blog post!", "tags": [ "mongodb", "python", "pymongo" ], "date": datetime.datetime.utcnow() }
插入Document
>>> posts = db.posts>>> post_id = posts.insert_one(post).inserted_id>>> post_idObjectedId('...')
第一步创建了名为posts的collection
第二步包含了两个过程:向posts中插入之前准备的数据(post),同时插入完成后返回inserted_id
第三步:调用post_id
执行完上述操作后,会在mongodb服务端创建数据库并插入数据
>>> db.collection_names(include_system_collections=False)>>> db.collection_names?# Get a list of all the collection names in this database.# 这个方法会返回当前数据库中的所有的collection的列表
获取一个Document
>>> posts.find_one()# get the first document from the posts collection# 会获取posts的第一条记录
>>> posts.find_one({'author': 'Mike'})>>> # 用一个不存在的数据查询,会返回空
通过字典查询,可以理解为key=value
查询 通过ObjectId
>>> post_idObjectId(...)>>> posts.find_one({'_id': 'post_id'})... # 返回查询结果
>>> post_id_as_str = str(post_id)>>> posts.find_one({'_id': post_id_as_str})# No result# ObjectId =/= string
ObjectId不是string类型的对象,所以如果用string查询id,就没有匹配结果
from bson.objectid import ObjectId# The web framework gets post_id from the URL and passed is as a string.def get(post_id): # Convert from string to ObjectId: document = client.db.collection.find_one({'_id': ObjectId(post_id)})
获取指定collection中的所有记录
>>> for i in db.get_collections('posts').find({}): print(i)
- get_collections方法中传入collection名称
- db.get_collections()返回的是一个可迭代对象
- find()中可以为空字典或空,也就是过滤条件为空,取全部记录
批量插入数据
>>> new_posts = [{ 'author': 'Mike', 'text': 'Another post!', 'tags': ['bulk', 'insert'], 'date': datetime.datetime(2009, 11, 12, 11, 14)}, { 'author': 'Eliot', 'title': 'MongoDB is fun', 'text': 'and pretty easy too!', 'date': datetime.datetime(2009, 11, 10, 10, 45)} ]>>> result = posts.insert_many(new_posts)>>> result.inserted_ids[ObjectId('...'), ObjectId('...')]
- insert_many() 会返回两个ObjectId实例
- new_posts[1] has a different “shape” than the other posts - there is no “tags” field and we’ve added a new field, “title”. This is what we mean when we say that MongoDB is schema-free.
查找多个数据
>>> for post in posts.find(): print(post)...There is the result...
>>> for post in posts.find({'author': 'Mike'}): print(post)
计数(Counting)
>>> posts.count()3>>> posts.find({'author':'Mike'}).count()
- 在查询结果后使用count()方法即可
按范围查找 (Range Queries)
>>> d = datetime.datetime(2017, 6, 28, 14)>>> for post in posts.find({"date"}:{"$lt": d}).sort("author"): print(post)
经验证“$lt”过滤的是这个时间点以前的所有记录
索引(Indexing)
# create index# 创建索引>>> result = result = db.profiles.create_index([('user_id', pymongo.ASCENDING)],unique=True)>>> sorted(list(db.profiles.index_information()))
# insert documents# 插入数据>>> user_profiles = [ {'user_id': 211. 'name': 'Luke'}, {'user_id': 212, 'name': 'Ziltoid'}]>>> result = db.profile.insert_many(user_profiles)
# insert a document whose user_id is already in the collection# 插入一个集合中已经存在的user_id>>> new_profile = {'user_id': 213, 'name': 'Drew'}>>> duplicate_profile = {'user_id': 213, 'name': 'Tommy'}>>> db.profiles.insert_one(new_profile)>>> db.profiles.insert_one(duplicate_profile)
Mongodb数据库中的概念
参考资料:菜鸟教程
总结
1、创建连接
# 有三种连接方式>>> client = MongoClient()# or>>> client = MongoClient(IP, Port)# or>>> client = MongoClient('mongodb://ip:port/')
2、连接到指定数据库(Database)
>>> db = client.database_name# or>>> db = client['database_name']
3、连接到指定collection
>>> collection = db.collection_name# or>>> collection = db['collection_name']
4、插入数据
# insert a document>>> single_data = {'name': 'Tom', 'weight': 100}>>> db.test.insert_one(single_data)# insert a lots of document>>> many_data = [{'name': 'Jerry', 'weight': 150},{'name': 'Blue', 'weight': 200}]>>> db.test.insert_many(many_data)
5、查询数据
# query all>>> for row in db.collection_name.find(): print(row)# query by ObjectId# find_one()参数为空时会默认取第一条数据>>> print(posts.find_one('_id': ObjectId('...')))...# query a set of documents>>> for row in db.collection_name.find({'key': 'value'}): print(row)# 可以在查询结果后使用sort()# db.collection_name.find().sort('key')
推荐工具:Robomongo
阅读全文
0 0
- pymongo库学习
- pymongo 学习-如何使用
- pymongo 学习总结
- pymongo
- pymongo
- pymongo
- pymongo
- pymongo 学习中的错误(1)
- centos中安装PyMongo库
- MongoDb学习笔记三 MongoDB and PyMongo
- Python 使用pymongo操作mongodb库
- Pymongo库简单应用(Python的mongodb库)
- pymongo api
- python -- PyMongo
- pymongo使用
- Install: pymongo
- pymongo 使用
- pymongo MongoClient
- spark【例子】同类合并、计算(主要使用groupByKey)
- 算法笔记--贪心(田忌赛马)
- python2和python3的区别
- makefile常用函数和自动化变量
- 【基础】JavaEE中Web服务器、Web容器、Application服务器区别以及联系
- pymongo库学习
- 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
- java数据类型(八种基本数据类型+三种引用类型)
- javascript本地对象String对象方法;
- Windows 检测dll是32/64位?
- 流程控制(二)
- 数据库(fmdb)
- Java动态代理--jdk代理
- UIView设置边框(整体设置和分开设置)