网站首页 > 基础教程 正文
MongoDB的安装
MongoDB的安装就不在这里赘述了,大家可以去官网下载安装,Windows的用户,推荐使用Windows10和64位操作系统,32位的似乎不怎么支持了,32位的可以下载,但是下载下来了,体验也十分不好。
下载官网:https://docs.mongodb.com/manual/installation/(三大平台的都有,自己下载安装即可)
安装 PyMongo模块
$ sudo pip install pymongo
创建MongoDB 数据库
mongo工具是MongoDB的交互式JavaScript Shell界面,它为系统管理员提供了一个界面,并为开发人员提供了一种直接通过数据库测试查询和操作的方法。
$ mongo testdb
MongoDB shell version: 2.6.10
connecting to: testdb
> show dbs
admin (empty)
local 0.078GB
test 0.078GB
testdb 0.078GB
好了,我们创建一个testdb数据库。
PyMongo 中创建collection集合
在第一个示例中,我们创建一个新集合。 MongoDB将文档存储在集合中。 集合类似于关系数据库中的表。
新建一个create_collection.py文件,如下:
from pymongo import MongoClient
cars = [ {'name': 'Audi', 'price': 52642},
{'name': 'Mercedes', 'price': 57127},
{'name': 'Skoda', 'price': 9000},
{'name': 'Volvo', 'price': 29000},
{'name': 'Bentley', 'price': 350000},
{'name': 'Citroen', 'price': 21000},
{'name': 'Hummer', 'price': 41400},
{'name': 'Volkswagen', 'price': 21600} ]
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
db.cars.insert_many(cars)
该示例创建一个新的cars collection集合,它包含八个文档。
cars = [ {'name': 'Audi', 'price': 52642},
{'name': 'Mercedes', 'price': 57127},
{'name': 'Skoda', 'price': 9000},
{'name': 'Volvo', 'price': 29000},
{'name': 'Bentley', 'price': 350000},
{'name': 'Citroen', 'price': 21000},
{'name': 'Hummer', 'price': 41400},
{'name': 'Volkswagen', 'price': 21600} ]
该Python词典存储了八个要插入到MongoDB集合中的记录。
client = MongoClient('mongodb://localhost:27017/')
MongoClient用于与MongoDB通信。 我们向MongoClient传递主机名和端口号。
db = client.testdb
我们获得了对testdb数据库的引用.
db.cars.insert_many(cars)
使用insert_many()方法,我们将八个文档插入到 cars collection,中,该集合也将自动创建。
> db.cars.find()
{ "_id" : ObjectId("5b41eb21b9c5d915989d48a8"), "price" : 52642, "name" : "Audi" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48a9"), "price" : 57127, "name" : "Mercedes" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48aa"), "price" : 9000, "name" : "Skoda" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ab"), "price" : 29000, "name" : "Volvo" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ac"), "price" : 350000, "name" : "Bentley" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ad"), "price" : 21000, "name" : "Citroen" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48ae"), "price" : 41400, "name" : "Hummer" }
{ "_id" : ObjectId("5b41eb21b9c5d915989d48af"), "price" : 21600, "name" : "Volkswagen" }
我们使用mongo工具验证数据。
PyMongo列表集合
通过collection_names(),我们可以获得数据库中可用的列表,新建一个list_collections.py文件:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
print(db.collection_names())
该示例在testdb数据库中打印集合。
PyMongo 删除集合.
drop()方法从数据库中删除一个集合。
新建一个drop_collection.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
db.cars.drop()
上面的示例从testdb数据库中删除cars集合。
PyMongo中的运行命令
我们可以使用command()向MongoDB发出命令。 服务器状态命令返回MongoDB服务器的状态。
新建一个server_status.py文件;
from pymongo import MongoClient
from pprint import pprint
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
status = db.command("serverStatus")
pprint(status)
dbstats命令返回反映单个数据库使用状态的统计信息。
from pymongo import MongoClient
from pprint import pprint
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
print(db.collection_names())
status = db.command("dbstats")
pprint(status)
该示例显示testdb的数据库统计信息。
PyMongo光标
find方法返回一个PyMongo游标,该游标是对查询结果集的引用。
新建一个cursor.py文件,如下:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
cars = db.cars.find()
print(cars.next())
print(cars.next())
print(cars.next())
cars.rewind()
print(cars.next())
print(cars.next())
print(cars.next())
print(list(cars))
PyMongo读取所有数据
在下面的示例中,我们从集合中读取所有记录。 我们使用Python for循环遍历返回的游标。新建一个all_cars.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
cars = db.cars.find()
for car in cars:
print('{0} {1}'.format(car['name'],
car['price']))
使用Python for循环,我们遍历结果集,结果如下;
Audi 52642
Mercedes 57127
Skoda 9000
Volvo 29000
Bentley 350000
Citroen 21000
Hummer 41400
Volkswagen 21600
PyMongo中的文件计数
使用count()方法检索文档数,新建一个count_cars.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
n_cars = db.cars.find().count()
print("There are {} cars".format(n_cars))
运行结果如下:
There are 8 cars
PyMongo过滤器
find()和find_one()的第一个参数是一个过滤器。 筛选器是所有文档必须匹配的条件。
新建filtering.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
expensive_cars = db.cars.find({'price': {'$gt': 50000}})
for ecar in expensive_cars:
print(ecar['name'])
该示例打印价格大于50000的汽车的名称。
expensive_cars = db.cars.find({'price': {'$gt': 50000}})
find()方法的第一个参数是所有返回的记录必须匹配的过滤器。 过滤器使用$ gt运算符仅返回昂贵的汽车。
运行结果为:
Audi
Mercedes
Bentley
PyMongo投影
通过投影,我们可以从返回的文档中选择特定字段。 投影在find()方法的第二个参数中传递。
新建一个projection.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
cars = db.cars.find({}, {'_id': 1, 'name':1})
for car in cars:
print(car)
该示例打印文档的_id和name字段。
cars = db.cars.find({}, {'_id': 1, 'name':1})
输出结果如下:
{'name': 'Audi', '_id': ObjectId('5b41eb21b9c5d915989d48a8')}
{'name': 'Mercedes', '_id': ObjectId('5b41eb21b9c5d915989d48a9')}
{'name': 'Skoda', '_id': ObjectId('5b41eb21b9c5d915989d48aa')}
{'name': 'Volvo', '_id': ObjectId('5b41eb21b9c5d915989d48ab')}
{'name': 'Bentley', '_id': ObjectId('5b41eb21b9c5d915989d48ac')}
{'name': 'Citroen', '_id': ObjectId('5b41eb21b9c5d915989d48ad')}
{'name': 'Hummer', '_id': ObjectId('5b41eb21b9c5d915989d48ae')}
{'name': 'Volkswagen', '_id': ObjectId('5b41eb21b9c5d915989d48af')}
PyMongo中的文件排序
我们可以使用sort()对文档进行排序。
新建一个sorting.py文件;
from pymongo import MongoClient, DESCENDING
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
cars = db.cars.find().sort("price", DESCENDING)
for car in cars:
print('{0} {1}'.format(car['name'],
car['price']))
该示例按价格降序对记录进行排序。
Bentley 350000
Mercedes 57127
Audi 52642
Hummer 41400
Volvo 29000
Volkswagen 21600
Citroen 21000
Skoda 9000
PyMongo聚合
聚合计算集合中数据的聚合值。
新建一个aggregate_sum.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
agr = [ {'$group': {'_id': 1, 'all': { '$sum': '$price' } } } ]
val = list(db.cars.aggregate(agr))
print('The sum of prices is {}'.format(val[0]['all']))
该示例计算所有汽车价格的总和。
agr = [ {'$group': {'_id': 1, 'all': { '$sum': '$price' } } } ]
$ sum运算符计算并返回数值的总和。 $ group运算符通过指定的标识符表达式对输入文档进行分组,并将累加器表达式(如果指定)应用于每个组。
val = list(db.cars.aggregate(agr))
Aggregate()方法将聚合操作应用于cars集合。
输出结果如下:
The sum of prices is 581769
我们可以用$ match运算符来选择要汇总的特定汽车。
新建一个sum_two_cars.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
agr = [{ '$match': {'$or': [ { 'name': "Audi" }, { 'name': "Volvo" }] }},
{ '$group': {'_id': 1, 'sum2cars': { '$sum': "$price" } }}]
val = list(db.cars.aggregate(agr))
print('The sum of prices of two cars is {}'.format(val[0]['sum2cars']))
该示例计算奥迪和沃尔沃汽车的价格总和。
agr = [{ '$match': {'$or': [ { 'name': "Audi" }, { 'name': "Volvo" }] }},
{ '$group': {'_id': 1, 'sum2cars': { '$sum': "$price" } }}]
该表达式使用$ match,$ or,$ group和$ sum运算符执行任务。
输出结果如下:
两辆车的总价是81642。
The sum of prices of two cars is 81642
PyMongo限制数据输出
limit查询选项指定要返回的文档数,而skip()选项指定某些文档。
新建limit_documents.py文件;
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
with client:
db = client.testdb
cars = db.cars.find().skip(2).limit(3)
for car in cars:
print('{0}: {1}'.format(car['name'], car['price']))
该示例从cars集合中读取,跳过前两个文档,并将输出限制为三个文档。
cars = db.cars.find().skip(2).limit(3)
注意:skip(2).limit(3)的位置可以互相调换,不影响输出结果,不妨尝试一下.
skip()方法跳过前两个文档,而limit()方法将输出限制为三个文档,输出结果为:
Skoda: 9000
Volvo: 29000
Bentley: 350000
在PyMongo教程中,我们使用了MongoDB和Python。
希望对大家有用,欢迎一起交流学习,探讨,如果有错误,希望大家勘误.
猜你喜欢
- 2024-10-29 57个挑战之57(part6):客户端+web前端+服务端代码实现
- 2024-10-29 技术干货|MongoDB数据库常见操作命令
- 2024-10-29 ABP vNext框架文档解读28-数据过滤
- 2024-10-29 自建MongoDB实践:MongoDB 分片集群
- 2024-10-29 小程序 随机读取数据并生成分享图片 上手笔记
- 2024-10-29 go-mongox:简单高效,让文档操作和 bson 数据构造更流畅
- 2024-10-29 当MongoDB遇见Spark mongodb campass
- 2024-10-29 MongoDB 5.0 官方文档学习笔记 mongodb教程
- 2024-10-29 好东西,MySQL 数据库 MongoDB详解
- 2024-10-29 MongoDB 入门 day04 mongodb27017
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (86)
- location.href (69)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)