蒸气3与Mongo DB

任何新项目都始于一个伟大的想法。 然后,您必须查看架构。 对于好主意,您应该期望获得更大的规模和大量的数据。 因此,您应该使用NoSQL数据库。 对于我的最新项目,我认为最简单的方法是使用MongoDB。 因此,我开始设置我的项目,并在蒸气3的文档中寻找如何连接到mongo数据库的起点。 令人惊讶的是,蒸气3的文档为空empty。 但这并没有阻止我。 在不同的领域进行了一些研究,我发现有2个解决方案,其中一个是Mongokitten,这似乎是蒸气2最常用的解决方案,另一个是MongoDB本身的mongo db swift驱动程序。

因此,我感谢MongoDB为构建友好的本机Swift驱动程序所做的努力,该驱动程序支持Swift Package Manager的使用。 我认为这可能非常适合我的服务器端swift项目。 我决定使用MongoDB的驱动程序。

那么如何开始呢? 首先,我必须将依赖项添加到我现有的蒸气3项目中。 为此,我必须将mongo驱动程序的url和版本添加到Package.swift文件中并获取新的源代码。

  包=包( 
依赖项:[
...
// Mongo Db
.package(网址:“ https://github.com/mongodb/mongo-swift-driver.git”,来自“ 0.0.7”)
],
目标:[
.target(name:“ App”,依赖项:[“ MongoSwift”,“ Vapor”]),
...
])

这很容易,但是现在我需要知道如何在蒸气框架内使用它。 我在mongo swift驱动程序项目的示例区域中找到了起点。 通过此代码示例,我可以设置数据库连接并将客户端实例注册为蒸气框架运行时中的服务。 为此,必须扩展Mongo Client,以便将服务协议应用于该协议。

  //configure.swift 
  //准备好mongo收集服务 
  public func configure( _ config: inout Config, _ env: inout Environment, _ services: inout Services) 抛出 { 
...
//注册Mongo客户
客户= 尝试 ! MongoClient(connectionString:
“ mongodb:// localhost:27017”)
db = try ! client.db(“ myDB”)
let collection:MongoCollection
{
收集= 尝试 db.createCollection(“ myCollection”)
} {
收集= 尝试 db.collection(“ myCollection”)
} services.register(客户端)
  } 
  扩展 MongoClient:服务{} 

如蒸气文档中所述,服务框架允许您注册应用程序中可能需要的任何内容。 在这种情况下,我们需要Mongo Client。 通过注册设置,可以从路由器功能内部访问mongo db客户端。 为什么? 因此,蒸气3具有容器的概念,容器可以管理与服务的交互。 蒸气3应用,请求和响应中有3种类型的容器。 这将我带回到我们注册的mongo db客户端即服务。 现在可以在“请求”容器中使用此服务。 以下简单查询的代码段说明了如何在Request容器中创建mongo db客户端以及如何从db查询文档。

  router.get(“ / purine / dailysummary /”){req-> [DailySummary]在 
客户= 尝试 ! req.make(MongoClient.self)
返回 getCurrentDialySummary(client:client)
}
  ... 
func getCurrentDialySummary(client:MongoClient)-> [DailySummary] {
  收藏= 尝试 !  client.db(“ myDB”) 
.collection(“ myCollection”,withType:DailySummary。self)
  文档= 尝试 !  collection.find( 
[“ timestamp”:DateFormatterController()
.currentDayInSeconds()
.timeIntervalSince1970]

var listOfDailySummary = [DailySummary]()

用于文件中的d {
listOfDailySummary.append(d)
}
返回 listOfDailySummary
}

如果您想获得有关此主题的更多信息,可以在GitHub https://github.com/idev4u/purine-guardian上检出整个项目。该项目仍在进行中,但是我已经构建了一个基于CRUD的api帮助获得更多示例代码,以解决一些未解决的问题,蒸气3和mongodb如何配合使用。

谢谢阅读! 请提供反馈,不要害羞地提出问题。

干杯诺曼

链接:

mongodb / mongo-swift-driver
用于MongoDB的Swift驱动程序。 通过在GitHub上创建一个帐户,为mongodb / mongo-swift-driver开发做出贡献。 github.com mongodb / mongo-swift-driver
用于MongoDB的Swift驱动程序。 通过在GitHub上创建一个帐户,为mongodb / mongo-swift-driver开发做出贡献。 github.com idev4u /嘌呤卫士
通过在GitHub上创建一个帐户,为idev4u / purine-guardian开发做出贡献。 github.com 入门– Vapor Docs
编辑描述 docs.vapor.codes 服务–蒸气文件
服务是Vapor的依赖项注入(也称为控制反转)框架。 服务框架… docs.vapor.codes