Meow 2.0.1

Meow 2.0.1

Joannis OrlandosRobbert Brandsma 维护。



Meow 2.0.1

🐈Meow

Meow 是由 MongoKitten 制造商创建的一个无样板对象持久性框架,适用于 Swift 和 MongoDB。

它为您管理数据库,这样您就可以专注于编写应用程序。

它如何工作

Meow 有一个管理数据库的 Manager 类型。您需要为每个 NIO 事件循环创建一个。管理器是围绕 MongoKitten 的小型包装,负责连接、发现和重新连接。

从您的管理器中,您可以创建一个上下文,将上下文视为在单个任务中相关的某物。任务可能是运行迁移或响应 HTTP 请求。

在您的上下文中,模型被缓存和引用。因此,如果第二次获取相同的用户,只要它当前上下文内可用,Meow 就会第二次引用原始实例。强烈建议解决依赖于此机制的引用。

创建模型

创建模型时,您需要使您的 class 符合 Model。唯一的要求是,您需要向您的模型添加一个 key_id 且不 计算属性的属性。

final class User: Model {
  var _id = ObjectId()
  
  ...
}

只要它是一个标准 BSON Primitive 类型,您就可以为 _id 键使用任何类型,包括

  • ObjectId
  • String
  • Double
  • Int
  • Int32
  • Binary / Data

以下是完全合法的

// Stores the username in _id
final class User: Model {
  var _id: String
  
  var username: String {
    return _id
  }
  
  ...

默认情况下,模型名称将用作集合名称。您可以使用 static let collectionName: String 来自定义此名称。

final class User: Model {
  // Changes the collection name from `User` to `users`
  static let collectionName = "users"

  var _id = ObjectId()
  
  ...

查询

查询位于 上下文 中。

引用

final class Article: Model {
  var _id = ObjectId()
  let creator: Reference<User>
  var title: String
  var text: String
  
  ...

上述示例展示了如何创建到另一个模型(例如用户模型)的简单引用。下面将演示解析引用的过程。

let resolvedUser = article.creator.resolve(in: context)

在这种情况下,结果是 EventLoopFuture,但如果您希望当引用的目标不存在时将其解析为 nil,则可以直接执行 article.creator.resolveIfPresent(in: context)

您还可以使用 reference.deleteTarget(in: context) 删除引用的目标。这意味着默认解析方式(不是使用 ifPresent)将导致失败。

不支持的功能

如果某个功能由 Meow 不支持,例如当它不能是类型安全的时,您始终可以回退到 MongoKitten

let database: MongoKitten.Database = context.manager.database

🐈社区

在此加入我们的 Slack,并成为友好社区的一员

⭐️功能

  • 无需样板代码
  • 如此简单,让您满心欢喜,或者全额退款!
  • 惊人的类型安全自动完成查询
  • 支持自定义 MongoDB 查询
  • 轻松迁移到新的模型版本
  • 使用 Codable 支持您自己的类型(如结构体和枚举)和常见类型(如 String、Int 和 Date),无需额外配置