MongoDB在数据处理中的应用

新知榜官方账号

2023-10-14 03:07:19

MongoDB在数据处理中的应用

MongoDB是一种强大的NoSQL数据库,它在当今数据处理领域扮演着至关重要的角色。相比传统的关系型数据库,MongoDB引领着数据管理的新潮流,具有一些显著的优势。首先,MongoDB采用了灵活的文档存储格式,无需预定义表结构,使得数据存储和查询变得极为容易。其次,MongoDB能够轻松处理大规模和高速增长的数据,确保高性能和可伸缩性。最重要的是,MongoDB的数据模型非常适合应对现代应用中的多样化数据类型,这让开发人员能够更自由地构建应用,不受严格的模式限制。

原生查询语言MQL(MongoDBQueryLanguage)曾一度让开发者感到不便,因其不够直观、查询语法不一致。对于习惯了SQL的开发人员来说,尤其是在MongoDB数据分析方面,这带来了挑战。MQL(MongoDBQueryLanguage)是JavaScript脚本,但对于主要使用SQL查询数据的开发人员来说,将SQL应用于MongoDB集合可能会更加便捷。SmartNotebook则通过将您的SQL查询转化为JavaScript,使您能够更轻松地操作MongoDB数据,克服了MQL的限制。

MongoDB这句口号“Builtbydevelopers,fordevelopers(由开发者构建,供开发者使用)“暗示着API仅供开发者使用,着实对数据分析者不太友好!SmartNoteBook是协作的、集成的、一站式数据科学/分析环境。SmartNoteBook是参考Jupyternotebook思想实现数据科学与分析的强大环境,深度融合Python(编程能力、AI能力)与SQL(数据处理)、可视化于一体,更高效编辑、执行和共享数据应用模型,进行数据采集、探索、机器学习、深度学习和交互可视化。开箱即用的数据科学、机器学习工具包;高效编辑器辅助和团队协作跟踪功能;通过Notebook结构化逻辑关系配合自然语言可以很好表现数据分析过程、阐述数据故事,形成数据报告,深层次的挖掘数据、释放数据价值。

接下来,我们将通过SmartNotebook来演示如何使用SQL查询MongoDB数据库,以及在notebook中如何便捷地利用pymongo的API来操作MongoDB。SmartNotebook不仅实现了SQL操作MongoDB的功能,还封装了pymongo的API,使其能够独立管理MongoDB数据源。这意味着您无需在代码中硬编码连接信息,而可以安全且便捷地访问MongoDB,为您的数据操作提供了更加灵活的方式。

创建Mongo测试库

首先,我们将使用Docker来创建MongoDB数据库,并进行简单的数据插入和查询测试:

docker pull mongo:4.2
mkdir /data01/snb_mongo
docker run -d -p 27017:27017 --name snb_mongo -e MONGO_INITDB_ROOT_USERNAME=snb_mongo -e MONGO_INITDB_ROOT_PASSWORD=****** -v /data01/snb_mongo:/data/db mongo:4.2
docker exec -it snb_mongo mongo -u snb_mongo -p ****** --authenticationDatabase admin

测试样例代码,创建Database、Collections、插入数据、查询数据:

use snb_data
db.test.insertOne({x:1})
db.test.find()

在成功创建MongoDB数据库之后,我们将继续在SmartNotebook中创建MongoDB数据,然后进行SQL和API演示。

配置MongoDB数据源

我们提供了独立的MongoDB数据源配置管理功能,可以轻松配置连接信息,支持连接测试、密码的安全加密存储,以及元数据(Collections)的预览功能。

API演示及说明

API执行SQL:

from snb_plugin.mongo.sql import MongoSqlClient

conn = MongoSqlClient('mongodb://snb_mongo:******@172.30.81.86:27017/' + 'admin?default_database=snb_data')
result = conn.sql('SELECT * FROM test limit 1')
for item in result:
    print(item)

便捷连接方式及API:

在数据资源菜单中,您可以轻松找到MongoDB数据源项,并点击复制以获取便捷的连接信息,以供API编程使用。

复制生成的代码如下所示:

from snb_plugin.sql.execute_sql import __smartnotebook_get_engine_by_conn_id as snb_conn

engine = snb_conn("0242ac110008-11ee6375-4d566fe2-96bf", context=globals())
# engine是MongoSqlClient的示例对象,MongoSqlClient是pymongo.MongoClient的子类
# 详细参阅:https://pymongo.readthedocs.io/ 和 https://www.mongodb.com/docs/manual/reference/sql-comparison/
# 以下是示例代码:
engine.snb_data.test.insert_one({"x":10})
resultes = engine.snb_data.test.find({})
for resu in resultes:
    print(resu)

生成模拟测试数据,API查询数据:

from snb_plugin.sql.execute_sql import __smartnotebook_get_engine_by_conn_id as snb_conn
import random as rand

for item in '张三 王五 李六 王二 麻子 赵二'.split():
    engine.snb_data.user.insert_one({'user_name':item, 'age':rand.randint(20,30), 'sex':rand.choice(['F','M'])})
resultes = engine.snb_data.user.find({})
# resultes=engine.snb_data.user.find({},{}) # mongodb4.2只是输出_id
for resu in resultes:
    print(resu)

MongoDBSQL演示及说明

您可以在插入SQL单元格时,在数据源选择相应的MongoDB数据源,并编写SQL查询语句进行执行。查询结果将被保存到一个PandasDataFrame变量中,以与其他SQL单元格相同的方式使用。此外,还支持Jinja2动态模板,使您能够以动态方式构建SQL查询。目前,这一功能还比较有限,主要支持数据筛选查询功能;不过您可以利用SmartNotebook的其他功能来进一步处理和进行统计计算。未来,我们将逐步扩展功能,以支持更多的汇总统计语句,使您能够更灵活地处理和分析数据。

支持的Select语句包括列选定、条件(Where)、Limit和Skip,例如:

SELECT * FROM user
SELECT user_name, sex, age FROM user limit 5 SKIP 3
SELECT user_name, sex, age FROM user where user_name = '王五'
SELECT user_name, sex, age FROM user where age > 25
SELECT user_name, sex, age FROM user where age > {{age}}

SmartNotebook整合了MongoDBAPI功能,实现了SQL操作的便捷性,将MongoDB的灵活性与SQL查询的便捷性相结合。它让用户能够轻松地连接、操作和分析MongoDB数据,无需复杂的编码。虽然目前功能还有限,主要支持数据筛选查询,但具有更多扩展功能的潜力。SmartNotebook为MongoDB用户提供了一种更高效、更灵活的数据分析环境,将数据的潜力充分释放出来。

本页网址:https://www.xinzhibang.net/article_detail-16728.html

寻求报道,请 点击这里 微信扫码咨询

关键词

MongoDB NoSQL 数据管理

分享至微信: 微信扫码阅读

相关工具

相关文章