Deno 中如何与 MongoDB 进行交互
Deno 是一种现代的 JavaScript 和 TypeScript 运行时,它的出现极大地改善了前端开发的体验。然而,Deno 目前还不能完全地支持 Node.js 的生态系统,因此我们需要想出一种方法来在 Deno 中使用各种 Node.js 的模块和库。而 MongoDB 是一种流行的 NoSQL 数据库,它的类 Node.js 驱动包含了强大的功能。在本文中,我们将介绍如何在 Deno 中使用 MongoDB 驱动程序进行高效的数据库操作。
为什么使用 MongoDB?
在选择一种数据库时,最重要的是选一个适合你项目的解决方案。这些方案中包括数据的结构,规模,复杂度和你的应用可能会面临的其他挑战。MongoDB 提供了许多功能和优势,使得它成为一种流行的选择。
- MongoDB 是一种文档数据库,它没有固定的模式。你可以在同一集合中存储多种类型的文档。
- MongoDB 确保了内容的灵活化和可重用性,因为它可以轻松地处理大量的数据,包括复杂的对象和嵌套的数据结构。
- MongoDB 使用 BSON(二进制 JSON)格式来序列化和存储文档,这使得查询和分析文档变得更加高效和可靠。
- MongoDB 提供了一个良好的分布式和水平扩展方案,允许在多个服务器上运行和分隔数据库。
- MongoDB 为应用程序开发者提供了一种方便,快捷,强大易用的数据访问模型,其中包括类似 SQL 的聚合框架。
Deno 中使用 MongoDB 驱动
在 Deno 中使用 Module 还未被完全支持,因此常常使用一种名为 "import maps" 的功能来实现。import maps 很类似于 webpack 中的别名,允许你在有限的范围内映射 URL 到文件系统位置。在本文中,我们将使用 "import-maps" npm 包来实现数据库连接的驱动。
首先,你需要安装这个包:
npm i import-maps
然后,我们可以定义我们的 import map 配置:
{ "imports": { "mongodb": "https://deno.land/x/mongo/mod.ts" } }
我们可以看到,在这个配置中,我们把字符串 "mongodb" 映射到一个特定的 API 地址,这个映射指向了 https://deno.land/x/mongo/mod.ts
。
在这个配置文件中,我们要使用 Deno 标准库中的 fetch API,加载这个 import map 配置文件:
const cachedImportMap = `{"imports":{"mongodb":"https://deno.land/x/mongo/mod.ts"}}`; const file = await Deno.makeTempFile(); await Deno.writeTextFile(file, cachedImportMap); const js = await (await fetch(file)).text(); const importMap = JSON.parse(js);
现在,我们已经拥有了 MongoDB 驱动所需的导入映射。现在我们需要连接到数据库。Deno 的 Mongo 驱动允许我们使用 Mongo 的连接 URL,如下所示:
const conn = await MongoClient.connect("mongodb://localhost:27017");
现在,我们需要找到一个能够使用我们的导入映射来正确导入 MongoClient 的方法。我们需要创建一个脚本,其中包含有使用 MongoClient.connect() 方法的代码。
-- -------------------- ---- ------- ------ - ----------- - ---- ---------- -- ----------------- ----- --- - ---------------------------------- ----- -------- ------ - ----- ------ - ------------------------- ----- -- - ------------ -- -------------- -- --------- --------------- - ------ -------- -- - --------------------- -- ------------ -- - ------------------- ---
MongoDB 增删改查操作
在数据库连接之后,我们需要通过调用 db.collection()
方法来选取我们要进行操作的文档对象。在这个例子中,我们将使用集合 "users":
const users = db.collection("users");
在这里,我们可以看到我们所选的集合是通过 db.collection()
方法得到。
接下来,我们可以利用 MongoDB 的文档 API 来进行增删改查等操作。以插入操作为例:
const insertResult = await users.insertOne({ name: "Alice", age: 20 }); console.log(insertResult.insertedId);
在这里,我们可以看到我们传递给 users.insertOne()
方法的对象被插入到数据库中,除此之外,我们还能得到插入操作的结果信息,其中包括插入记录的 ID。
现在,我们来看看如何给文档添加更多的属性:
const result = await users.updateOne( { name: "Alice" }, { $set: { email: "alice@example.com" } } );
在这里,我们使用 $set
更新操作符来添加一个新的属性 email
到我们的文档中。这是一个原子操作,意味着如果上下文中有多个操作,这个更新操作能够作为一个原子事务来执行。
查询操作也非常简单,例如,我们可以查找年龄大于等于 21 的人:
const cursor = users.find({ age: { $gte: 21 } }); await cursor.forEach((doc) => { console.log(doc); });
在这里,我们可以看到我们使用了 users.find()
方法,这个方法接收一个查询对象。在这个例子中,我们使用一个包含一个 $gte
操作符的查询对象,表示大于等于。结果将是一个包含符合条件记录的 Cursor 对象。我们使用游标来遍历所有结果,并做其它处理。
结论
在本篇文章中,我们学习了如何在 Deno 中使用 MongoDB 驱动。我们使用了 import-maps npm 包来重定向标准的 JavaScript 模块导入。我们还介绍了使用 MongoDB 驱动的一些基本操作,包括连接到数据库,选择集合,插入、更新、和查找文档。MongoDB 和 Deno 都是非常强大和灵活的技术,他们的集成使用将为开发人员带来更好的体验和使用效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6723221b2e7021665e0e8af8