新知榜官方账号
2023-10-14 03:07:19
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,为您的数据操作提供了更加灵活的方式。
首先,我们将使用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数据源配置管理功能,可以轻松配置连接信息,支持连接测试、密码的安全加密存储,以及元数据(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)
您可以在插入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用户提供了一种更高效、更灵活的数据分析环境,将数据的潜力充分释放出来。
相关工具
相关文章
推荐
中国首款3A游戏上线,《黑神话:悟空》出圈!
2024-08-21 13:46
盘点15款AI配音工具,短视频配音有救了!
2024-08-12 17:11
短视频文案没创意?10大AI写作工具来帮你!
2024-08-05 16:23
Midjourney发布V6.1版本,我已分不清AI和现实了!
2024-08-01 15:03
我发现了一款国产AI绘画神器,免费易上手!
2024-07-25 16:40
7位AI考生做今年高考题,能过一本线吗?
2024-07-19 17:17
世界上第一所AI学校来了,80亿人只需要1位老师?
2024-07-18 17:12
Sora首部AI广告片上线,广告从业者危险了!
2024-06-27 13:44
OpenAI与中国说拜拜,国产AI如何接棒?
2024-06-26 15:18
人与AI会产生爱情吗,专家发话了!
2024-06-17 17:28