MongoSwift 0.1.3

MongoSwift 0.1.3

Matt BroadstoneKaitlin Mahar 维护。



  • 作者
  • Matt Broadstone、Kaitlin Mahar 和 Patrick Freed

Build Status Code Coverage

MongoSwift

Swift 的官方 MongoDB 驱动程序。

索引

文档

最新的文档可在 此处 找到。

错误/功能请求

你认为发现了错误? 想要看到 mongo-swift-driver 中的新功能? 请在我们的问题管理工具 JIRA 中建立一个案例。

  1. 创建账户并登录:jira.mongodb.org
  2. 导航到 SWIFT 项目:jira.mongodb.org/browse/SWIFT
  3. 点击 创建问题 - 请尽可能提供有关问题和如何复现问题的信息。

JIRA中所有驱动项目(例如NODE、PYTHON、CSHARP、JAVA)和核心服务器项目(例如SERVER)的bug报告是公开的

安装

MongoSwift支持Swift 4.2及以上版本的Swift。

macOS和Linux

通过Swift包管理器支持在macOS和Linux上安装。

第一步:安装MongoDB C驱动程序

该驱动程序封装了MongoDB C驱动程序,要使用它,需要在您的系统上安装C驱动程序的这两个组件,即libbsonlibmongoc所需的最小C驱动程序版本为1.13.0

在Mac上,您可以使用Homebrew一次安装这两个组件:brew install mongo-c-driver

在Linux上:请按照libmongoc文档中的说明进行操作。注意,您的包管理器提供的版本可能过旧,在这种情况下,您可以按照从源构建和安装的说明进行操作。

在Ubuntu上的源代码安装示例请参阅Docker

第二步:安装MongoSwift

在进行下一步之前,请按照上一节关于安装MongoDB C驱动程序的说明进行操作。

Package.swift中将MongoSwift添加到您的依赖项中

// swift-tools-version:4.2
import PackageDescription

let package = Package(
    name: "MyPackage",
    dependencies: [
        .package(url: "https://github.com/mongodb/mongo-swift-driver.git", from: "VERSION.STRING.HERE"),
    ],
    targets: [
        .target(name: "MyPackage", dependencies: ["MongoSwift"])
    ]
)

然后运行swift build下载、编译和链接所有依赖项。

iOS、tvOS 和 watchOS

安装支持通过 CocoaPods 实现。

这个包作为一个依赖项包含了一个嵌入的 MongoDB C 驱动程序版本,用于在以下操作系统中使用。

注意:嵌入的驱动程序目前不支持 SSL。有关更多信息,请参阅#141CDRIVER-2850

按照以下方式将 MongoSwift 添加到您的 Podfile 中:

platform :ios, '11.0'
use_frameworks!

target 'MyApp' do
    pod 'MongoSwift', '~> VERSION.STRING.HERE'
end

然后运行 pod install 以安装您项目所需的依赖项。

示例用法

注意:您应该在应用结束时精确地调用一次 cleanupMongoSwift() 来释放 libmongoc 分配的所有内存和其他资源。

连接到 MongoDB 并创建集合

import MongoSwift

let client = try MongoClient("mongodb://127.0.0.1:27017")
let db = client.db("myDB")
let collection = try db.createCollection("myCollection")

// free all resources
cleanupMongoSwift()

注意:我们包含了客户端 connectionString 参数以增加清晰度,但如果连接到默认的 "mongodb://127.0.0.1:27017",则可以省略:let client = try MongoClient()

创建并插入文档

let doc: Document = ["_id": 100, "a": 1, "b": 2, "c": 3]
let result = try collection.insertOne(doc)
print(result?.insertedId ?? "") // prints `100`

查找文档

let query: Document = ["a": 1]
let documents = try collection.find(query)
for d in documents {
    print(d)
}

与修改文档

var doc: Document = ["a": 1, "b": 2, "c": 3]

print(doc) // prints `{"a" : 1, "b" : 2, "c" : 3}`
print(doc["a"] ?? "") // prints `1`

// Set a new value
doc["d"] = 4
print(doc) // prints `{"a" : 1, "b" : 2, "c" : 3, "d" : 4}`

// Using functional methods like map, filter:
let evensDoc = doc.filter { elem in
    guard let value = elem.value as? Int else {
        return false
    }
    return value % 2 == 0
}
print(evensDoc) // prints `{ "b" : 2, "d" : 4 }`

let doubled = doc.map { elem -> Int in
    guard let value = elem.value as? Int else {
        return 0
    }

    return value * 2
}
print(doubled) // prints `[2, 4, 6, 8]`

请注意,Document 符合 Collection,所以所有来自 SequenceCollection 的有用方法都可用。但是,许多这些方法还没有满足运行时保证。

与 Kitura 和 Vapor 使用

Examples/ 目录包含使用驱动程序与 KituraVapor 的示例项目。

开发说明

请参阅我们的开发指南以获取构建和测试驱动程序的说明。