MongoSwift
Swift 的官方 MongoDB 驱动程序。
索引
文档
最新的文档可在 此处 找到。
错误/功能请求
你认为发现了错误? 想要看到 mongo-swift-driver
中的新功能? 请在我们的问题管理工具 JIRA 中建立一个案例。
- 创建账户并登录:jira.mongodb.org
- 导航到 SWIFT 项目:jira.mongodb.org/browse/SWIFT
- 点击 创建问题 - 请尽可能提供有关问题和如何复现问题的信息。
JIRA中所有驱动项目(例如NODE、PYTHON、CSHARP、JAVA)和核心服务器项目(例如SERVER)的bug报告是公开的。
安装
MongoSwift
支持Swift 4.2及以上版本的Swift。
macOS和Linux
通过Swift包管理器支持在macOS和Linux上安装。
第一步:安装MongoDB C驱动程序
该驱动程序封装了MongoDB C驱动程序,要使用它,需要在您的系统上安装C驱动程序的这两个组件,即libbson
和libmongoc
。所需的最小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。有关更多信息,请参阅#141和CDRIVER-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
,所以所有来自 Sequence
和 Collection
的有用方法都可用。但是,许多这些方法还没有满足运行时保证。
与 Kitura 和 Vapor 使用
Examples/
目录包含使用驱动程序与 Kitura 和 Vapor 的示例项目。
开发说明
请参阅我们的开发指南以获取构建和测试驱动程序的说明。