PyMongo官方文档翻译——VNPY
Posted GavinSimons
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyMongo官方文档翻译——VNPY相关的知识,希望对你有一定的参考价值。
PyMongo是MongoDB数据库的python模块
VNPY默认的数据库,没有采用SQL类型的数据库,而是采用No-Sql类型的MongoDB数据库,
对于想了解VNPY内部结构的童鞋,多多少少会遇到PyMongo的调用问题,虽然我个人不喜欢用数据库的方式存储证券行情数据,这类高度结构化的数据,但为了重构VNPY,使得使用HDF5或CSV代替MongoDB,我们还是需要了解一下该数据库的调用方式,下面就给大家献上一篇PyMongo的官方文档的翻译
该文章引自:https://www.cnblogs.com/zhouxuchen/p/5544227.html 周煦辰的博客
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
本翻译文档包含以下内容:
- 使用PyMongo插入数据
- 使用PyMongo查询数据
- 使用PyMongo更新数据
- 使用PyMongo删除数据
- 使用PyMongo进行数据聚合
- 使用PyMongo创建索引
原文地址见链接:原文地址
PyMongo是一个用于MongoDB的Python工具,也是一个被推荐的Python操作MongoDB数据库的方式。
使用步骤
安装PyMongo
Linux或者OS X系统
你可以只用pip工具安装:
pip install pymongo
Windows系统下
使用Windows安装工具,详见https://pypi.python.org/pypi/pymongo/。
引入pymongo
在一个Python交互shell中完成此过程,或者也可以在其他Python环境中完成,例如Python脚本、Python模块、Python项目。
从pymongo中引入MongoClicent。
from pymongo import MongoClient
创建一个连接
使用MongoClient创建一个连接:
client = MongoClient()
如果你没有特别为MongoClient指定参数,MongoClient将使用MongoDB默认参数即localhost接口和27017端口。
你可以使用一个完整的MongoDB URI来定义连接:
client = MongoClient("mongodb://mongodb0.example.net:27019")
这个MongoClient代表了一个运行于mongodb.example.net端口号为27019的MongoDB连接。
访问数据库对象
第一个你用pymongo来交互的基本类是Database
,它代表了MongoDB中的数据库(database)结构。数据库保存了逻辑上相关的集合组。MongoDB将在第一次使用新的数据库的时候自动创建它。
你可以使用属性访问的方式,赋值一个数据库(例如名字为primer
)给本地变量db
,如下所示:
db = client.primer
你也可以使用字典形式访问一个数据库,这会移除Python特有的命名限制,如下所示:
db = client[\'primer\']
访问集合对象
第二个你将使用pymongo进行交互的基本类是Collection
,它代表了MongoDB中的集合(collection)结构。集合(collection)保存了逻辑上相关的文档组。
你可以直接使用字典形式访问集合或者通过一个访问一个数据库对象的属性来访问集合,如下所示:
db.dataset
db[\'dataset\']
你也可以给一个变量进行赋值,以在其他地方使用这个集合,如下所示:
coll = db.dataset
coll = db[\'dataset\']
使用PyMongo插入数据
概览
你可以使用insert_one()
方法和insert_many()
方法来向MongoDB的集合中插入文档。如果你所插入的集合在MongoDB中不存在,MongoDB将为你自动创建一个集合。
先决条件
在Python命令行或者IDLE中,使用MongoClient连接一个正在运行的MongoDB实例,且已经打开test
数据库。
from pymongo import MongoClient
client = MongoClient()
db = client.test
插入一个文档
向集合restaurants
中插入一个文档。如果集合不存在,这个操作将创建一个新的集合。
from datetime import datetime
result = db.restaurants.insert_one(
{
"address": {
"street": "2 Avenue",
"zipcode": "10075",
"building": "1480",
"coord": [-73.9557413, 40.7720266]
},
"borough": "Manhattan",
"cuisine": "Italian",
"grades": [
{
"date": datetime.strptime("2014-10-01", "%Y-%m-%d"),
"grade": "A",
"score": 11
},
{
"date": datetime.strptime("2014-01-16", "%Y-%m-%d"),
"grade": "B",
"score": 17
}
],
"name": "Vella",
"restaurant_id": "41704620"
}
)
这个操作返回了一个InsertOneResult对象,它包括了insert_id
属性表示被插入的文档的_id
。访问insert_id
的方式如下:
result.inserted_id
你插入的文档的ObjectId将和如下所示的不同。
ObjectId("54c1478ec2341ddf130f62b7")
如果你传递给insert_one()
方法的参数不包含_id
字段,MongoClient将自动添加这个字段并且生成一个ObjectId设置为这个字段的值。
使用PyMongo查询数据
概览
你可以通过find()
方法产生一个查询来从MongoDB的集合中查询到数据。MongoDB中所有的查询条件在一个集合中都有一个范围。
查询可以返回在集合中的所有数据或者只返回符合筛选条件(filter)或者标准(criteria)的文档。你可以在文档中指定过滤器或者标准,并作为参数传递给find()
方法。
find()
方法返回一个查询结果的游标,这是一个产生文档的迭代对象。
先决条件
本示例中使用test
数据库中的restaurants
集合。与使用示例数据填充集合有关的介绍请见Import Example Dataset。
在Python命令行或者IDLE中,使用MongoClient连接一个正在运行的MongoDB实例,且已经打开test
数据库。
from pymongo import MongoClient
client = MongoClient()
db = client.test
在一个集合中查询所有文档
调用find()
方式不需要传值即可得到集合中所有的文档。举例来说,如下所示的操作即是返回restaurants
集合中所有文档。
cursor = db.restaurants.find()
迭代游标(cursor)并且打印文档内容。
for document in cursor:
print(document)
结果包含了所有restaurants
集合中的所有文档。
指定相等条件
对某一个字段的相等条件查询有如下形式:
{ <field1>: <value1>, <field2>: <value2>, ... }
如果字段(<field>
)在某个文档的某一个数组内,则使用点操作符(dot notation)去访问该字段。
使用一个顶级字段进行查询
如下所示的操作将查询borough
字段等于Manhattan
的文档。
cursor = db.restaurants.find({"borough": "Manhattan"})
迭代游标(cursor)并且打印文档内容。
for document in cursor:
print(document)
结果将只包含符合条件的文档。
在一个嵌入式的文档中查询
要指定嵌入文档中的字段的查询条件,需要使用点操作符。使用点操作符需要使用双引号将字段名包裹。下面的操作将指定一个文档的地址字典中的邮编字段的一个相等的条件。
cursor = db.restaurants.find({"address.zipcode": "10075"})
迭代游标(cursor)并且打印文档内容。
for document in cursor:
print(document)
结果将只包含符合条件的文档。
更多的关于嵌入式文档的查询条件信息,请参阅Embedded Documents。
在一个数组中查询
grades
数组包含一个嵌入式文档作为其元素。在该文档的字段上指定一个相等条件需要用到点操作符。使用点操作符需要使用双引号将字段名包裹。如下所示的查询将查询一个有嵌入式文档的grades
字段,该字段中的grade
等于B
。
cursor = db.restaurants.find({"grades.grade": "B"})
迭代游标(cursor)并且打印文档内容。
python操作mongodb