文档章节

python 查询mongodb数据

罗布V
 罗布V
发布于 2016/04/06 17:48
字数 1045
阅读 3212
收藏 4

Python mongodb驱动安装

安装驱动

在max&linux里面直接在终端里面输入下面的语句就可以让python支持mongo

pip install pymongo

加载 pymongo

直接在交互终端里面输入下面的语句,加载pygmon模块

from pymongo import MongoClient

创建一个连接

使用MongoClient 创建一个连接:

client=MongoClient()

也可以通过传入参数进行选项设置

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

具体的内容可以参与MongoDB URL

访问数据库对象

mongo的数据库不用事前创建,当你调用cient.DatabaseName,一般DatabaseName没有创建它会自动帮助创建一个数据库,第二次这样访问的时候就会直接创建的是之前创建的对象

b = client.primer

你也可以通过下面的方式来进行数据的访问

db=client['primer']

插入数据

在mongo里面插入数据有两个方法insert_one()和insert_many(),前面的方式单次只能插入一个文档,后面的方法可以插入多个文档内容。倘若插入的集合没有事先定义,MongoDB会直接创建。

先决条件

我们通过 MongClient模块,并且创建一个连接,连接成功之后选择test数据库

from pymongo import MongoClient

client=MongoClient()

db=client.test2

插入一个文档

下面是将一个文档插入到restaurants的集合当中,如果这个restaurants集合没有包含在数据库当中,会自动进行创建。

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对象,它包含一个_id和inserted_id对象

result.inserted_id

查询数据

mongodb查询调用的是find()方法,可以传入一些查询的条件来查询想要的结果。返回的是一个可供遍历的结果集合,
对于下面所有的示例用的都是官网上面提示的一个实例文件,primer-dataset.json
下载完成之后通过在终端里面输入下面的语句就可以导入相应的数据

mongoimport --db test --collection restaurants --drop --file primer-dataset.json

对象的格式大概如下:

{'_id': ObjectId('5704d3c3a75b1775d3b21352'),
'address': {'coord': [-73.98513559999999, 40.7676919], 'zipcode': '10019', 'street': 'West   57 Street', 'building': '351'},
'name': 'Dj Reynolds Pub And Restaurant',
'borough': 'Manhattan',
'restaurant_id': '30191841',
'cuisine': 'Irish',
'grades': [{'score': 2, 'date': datetime.datetime(2014, 9, 6, 0, 0), 'grade': 'A'},
{'score': 11, 'date': datetime.datetime(2013, 7, 22, 0, 0), 'grade': 'A'},
{'score': 12, 'date': datetime.datetime(2012, 7, 31, 0, 0), 'grade': 'A'},
{'score': 12, 'date': datetime.datetime(2011, 12, 29, 0, 0), 'grade': 'A'}]}

查询所有的数据

下面的的语句调用的是find()的方法,返回restaurants当中所有集合中的所有对象.

cursor=db.restaurants.find()

迭代遍历cursor并且将结果进行输出

for document in cursor:
print(document)

指定条件查询

下面的查找操作仅显示borough为Manhattan的对象.

cursor = db.restaurants.find({"borough": "Manhattan"})

同样通过迭代遍历的方式输出查询的结果

    for document in cursor:
        print(document)

查询一个嵌入式的文档

在mongto里面的对象可以在自身包含另一个集合,比如下面的对象。
上面的primer-dataset.json里面的address是一个集合包含了coord,zipcode,street,building四个数据。
我们通过下面的语句查询address.zipcode仅为10075的集合

cursor = db.restaurants.find({"address.zipcode": "10075"})
for document in cursor:
    print(document)

通过条件查询对象

下面的语句查询的是grandes.score大于30的对象

cursor = db.restaurants.find({"grades.score": {"$gt": 30}})

下面的语句查询的是grades.score小于10的集合

cursor = db.restaurants.find({"grades.score": {"$lt": 10}})

逻辑条件判断

在mongo查询的时候可以通过使用(AND)和(OR)来查询

下面的查询的语句相当于,仅显示cuisine为Italian和address.zipcode为10075的数据。只有同时满足才显示。

cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"})
for document in cursor:
    print(document)

下面的查询的语句相当于,仅显示cuisine为Italian和address.zipcode为10075的数据。两个条件只要满足一个就可以.

cursor = db.restaurants.find({
"$or":[{"cuisine": "Italian", "address.zipcode": "10075"}]
}
)
for document in cursor:
    print(document)

数据排序

可以通过调用 pymongo.ASCENDING()pymongo.DESCENDING()来指定是按升降序进行排

import pymongo
cursor = db.restaurants.find().sort([
    ("borough", pymongo.ASCENDING),
    ("address.zipcode", pymongo.ASCENDING)
])

© 著作权归作者所有

上一篇: python操作mongo(2)
下一篇: python 解析json
罗布V
粉丝 13
博文 60
码字总数 47114
作品 0
温州
程序员
私信 提问
大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

加米谷数据分析挖掘课程明细,从理论到云端实操环境到项目实战,手把手教您从0掌握数据分析与挖掘技术,带您走进数据时代。 第一阶段(python基础) python入门:1、Python版本特性介绍2、P...

加米谷大数据
2018/04/17
25
0
地铁译:Spark for python developers ---Spark的数据戏法

聚焦在 Twitter 上关于Apache Spark的数据, 这些是准备用于机器学习和流式处理应用的数据。 重点是如何通过分布式网络交换代码和数据,获得 串行化, 持久化 , 调度和缓存的实战经验 。 认真使...

abel_cao
01/17
0
0
djongo:Django和MongoDB连接器

在Django项目中使用MongoDB作为后端数据库,且不改变Django的ORM框架。实现Django用户管理程序对MongoDB数据库中文件的增加和修改。 用法 1.pip install djongo 2.在Django项目下的setting.p...

p柯西
2018/06/20
40
0
Python3中PyMongo使用举例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengbingchun/article/details/89069165 MongoDB是一个基于分布式文件存储的开源数据库,由C++语言编写,与平...

fengbingchun
04/07
0
0
Python连接MongoDB数据库并执行操作

环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS release 6.9 (Final)[root@mongodb ~]# python -VPython 2.6.6 1.首先确保,Mongodb数据库运行 2.安装pymongo模块 官网:https......

XiaoBingZ
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MainThreadSupport

MainThreadSupport EventBus 3.0 中的代码片段. org.greenrobot.eventbus.MainThreadSupport 定义一个接口,并给出默认实现类. 调用者可以在EventBus的构建者中替换该实现. public interface ...

马湖村第九后羿
30分钟前
3
0
指定要使用的形状来代替文字的显示

控制手机键盘弹出的功能只能在ios上实现,安卓是实现不了的,所以安卓只能使用type类型来控制键盘类型,例如你要弹出数字键盘就使用type="number",如果要弹出电话键盘就使用type="tel",但这...

前端老手
40分钟前
5
0
总结:Raft协议

一、Raft协议是什么? 分布式一致性算法。即解决分布式系统中各个副本数据一致性问题。 二、Raft的日志广播过程 发送日志到所有Followers(Raft中将非Leader节点称为Follower)。 Followers收...

浮躁的码农
47分钟前
5
0
Flask-admin Model View字段介绍

Model View字段介绍 can_create = True 是否可以创建can_edit = True 是否可以编辑can_delete = True 是否可以删除list_template = 'admin/model/list.html' 修改显......

dillonxiao
今天
5
0
从AnnotationTransactionAspect开始rushSpring事务

0. Spring 事务 with LTW 0.1. Spring 事务 With LTW的原因: Pure Proxy-base mode有缺陷,其失效原因分析及使用方法及运行机制(LoadTimeWeaverBeanDefinitionParser和 AspectJWeavingEnable......

Aruforce
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部