为了教初学者MongoDB,我努力创作了一个自己的教学包的故事

你好 / 问好

这是我初次投稿。我叫做“せきぶん”等等。请多关照。

我在一个叫做駒場祭的学校节庆活动中进行了编程。
主要使用的是Node.js。

请注意

这篇文章只是简单介绍了所做的事情,没有提供解决方案。

2022年9月补充备注

当我久违地重新读了一遍,我发现这篇文章比我想象的更糟糕。
鉴于这是一位大二学生和两年经验的程序员努力写成的文章,在阅读时请将其视作小学低年级的作文,或者您可以选择返回上一页。

关于这篇文章

駒場祭委員会的情况

在组织駒場祭的駒場祭委员会中,有一个名为“系统部门”的部门负责信息技术领域。他们每年都会制作包括网站和参与活动计划注册及申请的网络系统,被称为网站系统。

由于是无薪的学生自治组织,经验丰富的成员很少,而駒場祭是一个专为大一和大二学生举办的校园祭,因此駒場祭委員会也只由一、二年级的学生组成。
因此,一年级的新手学生需要在两年级学生退休之前的半年内接受各种知识的教导。

虽然我也稍微接触过HTML等,但作为一个初学者,我进入了駒場祭委員会系统局,并在前辈的指导下逐渐成长。

在駒場祭的網站上(目前已無法使用),您可以找到一個頁面,上面顯示當天官方商品的銷售情況和校園遊覽活動中的參加獎品發放情況。這個網頁的開發不僅僅關乎前端(外觀部分),還涉及到在伺服器上運行的後端。

這篇文章是…

この記事では特にバックエンドに関して、初心者に伝えようとした僕の奮闘の記録です。
一番悩み、工夫したつもりのMongoDBに関して特に扱います。

我认为在技术和内容方面都不觉得有太多有趣之处,但希望这对校园节日的程序员或者那些在非IT企业中,由于IT部门的成员经常更替导致技术传承困难的人能够有所帮助。

从一开始就是什么让你感到困难的?

什么是后端?

对于初学者来说,“前端”和“后端”这些词可能不太熟悉。
我这样解释:“大家在用的浏览器就是前端,而后端是在服务器上运行的东西,比如登录数据如果不在服务器上就容易被篡改。”

关于数据库

「因为数据库有各种各样的功能,可以同时读写和检索数据,非常方便,所以我们使用它。我们将在駒場祭上使用的数据存放在服务器上。」我解释说,一年前当我听说数据库时,我不知道它的必要性(那时的我:“嗯?不就是用JSON文件保存吗?”),所以我解释了它的便利之处。另外,由于有MySQL和我们现在要使用的MongoDB等不同类型的数据库,我也做了相应的解释。

MongoDB的复杂性

在使用Node.js处理MongoDB时,基本上会使用名为mongodb的官方包。(虽然也有其他包如mongoose,但因为会变得更加复杂,所以下面将忽略它们,对初学者不友好。)这个过程有些繁琐,为了获取数据,需要

const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
const client = await MongoClient.connect('mongodb://127.0.0.1:27017/', {
            useUnifiedTopology: true,
            useNewUrlParser: true,
        });
const db = await client.db('dbName');
const collection = db.collection('collectionName');
const data = await collection.find().toArray();
client.close();

需要以中文进行本地化改写。以下是一个可能的选项:
需要以中文进行书写。

因为使用了await,所以还算好一些,但是如果封印了async/await的话,就会变得更加复杂。因此,不使用async/await来教授可能会更加困难,所以暂且教授async/await……话题讨论异步教学会比较冗长,所以省略。

还有一个问题是,当要进行连接、选择数据库、选择集合等等操作时,会变得很复杂,对于不知道什么是数据库的人来说会感到困惑。

当进一步学习MongoDB时,会出现有关Node.js之外的主题,对于不太了解Node.js的初学者来说,这可能会让他们感到困惑和不理解。

我该怎么办呢……?

靠自己打造的套餐解决问题吧!

好吧,如果不解决上述问题,一年级学生就永远无法熟练使用数据库。所以我们决定:“如果使用gg很难的话,那就不用gg好了!”“首先简化操作让学生熟悉起来!”于是我们制作了一个软件包。

这是mongodbeginner(GitHub)。
基本上是为了在内部教学时使用而创建的,所以它在各个方面都有些零碎,不确定它是否能够经受住实际应用的考验。

使い方

mongodbeginner的初学者首先尝试了一些方法,使得可以方便地使用数据库,结果每次都要进行连接等处理。
例如,当想要查找 id 为 1 的数据时,需要执行以下操作。

const mob = require('mongodbeginner')
const data = await mob.find("dbName","collectionName",{id: 1})

如果那样的话,没问题。

此外,如果想插入{id: 1, count: 0}这样的数据,

const mob = require('mongodbeginner')
const data = await mob.insert("dbName","collectionName",{id: 1, count: 0})

假设发生了类似的情况。

连接部分变得太过复杂的问题已经解决了,不是吗?

问题点 –

我在8月份完成了这个项目,虽然有许多地方我想改进,但还是因为自己的能力不足而无法评价这个成果。说实话,如果我有自信的话,我在制作时就会在Qiita上写一篇自豪地介绍这个项目的文章了。

最大的问题是最终还是需要使用 await。
解决这个问题的方法我特别想不出来,最后可能还是只能让初学者记住 Promise 或 async/await,没有其他办法了吗……?

(附赠)发布包到 npm 的超简易方法

公开npm包的过程比我想象的要简单得多。特别是参考了这篇文章。

因为这是一个内部使用的包,所以没有测试,非常简单。既然这样,我将记录下与平时的Node.js应用程序开发不同的部分。

$ npm set init.author.name "名前"
$ npm set init.author.email "メールアドレス"
$ npm set init.author.url "URL"
$ npm adduser
$ git tag -a v1.0.0 -m "My first version v1.0.0"
$ git push origin tags/v1.0.0
$ npm publish ./
$ npm version patch
$ git push origin tags/v1.0.1  # ここは手動でやるしかない
$ npm publish ./
$ npm version minor
$ git push origin tags/v1.1.0  # ここは手動でやるしかない
$ npm publish ./
$ npm version major
$ git push origin tags/v2.0.0  # ここは手動でやるしかない
$ npm publish ./

总结

为了让一年级学生熟悉MongoDB,我尝试了各种方法。但结果来看,对于初学者来说,理解仍然很困难。

由于我过于依赖我的经验,认为数据库是困难的,所以我忽视了在駒場祭上使用的Web应用框架Express.js的解释,并因此在那里遇到了难题,这表明教授初学者后端编程确实是一件困难的事情。

……也许我应该开始学习使用Ruby on Rails。虽然有时候听说它有点过时了…

bannerAds