Swift BSON

swift-bson-logo

Swift 中官方 MongoDB BSON 实现!

索引

Bug / 功能请求

认为您发现了一个 Bug? 想在 swift-bson 中看到新功能? 请在我们的问题管理工具 JIRA 中创建一个案例

  1. 创建账户并登录:jira.mongodb.org
  2. 导航到 SWIFT 项目:jira.mongodb.org/browse/SWIFT
  3. 点击 Create Issue(创建问题) - 请尽可能提供关于问题的信息以及如何重现它。

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

安装

该库支持 Swift 5.1+。 构建该库所需的最低 macOS 版本是 10.14。 该库在持续集成环境中针对 macOS 10.14、Ubuntu 16.04 和 Ubuntu 18.04 进行了测试。

支持通过 Swift Package Manager 进行安装。

安装 BSON

要安装该库,请将该包添加为项目 Package.swift 文件中的一个依赖项

// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name: "MyPackage",
    dependencies: [
        .package(url: "https://github.com/mongodb/swift-bson", .upToNextMajor(from: "3.1.0"))
    ],
    targets: [
        .target(name: "MyTarget", dependencies: ["SwiftBSON"])
    ]
)

使用示例

处理和修改文档

import SwiftBSON

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

print(doc) // prints `{"a" : 1, "b" : 2, "c" : 3}`
print(doc["a", default: "Not Found!"]) // prints `.int64(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.asInt() else {
        return false
    }
    return value % 2 == 0
}
print(evensDoc) // prints `{ "b" : 2, "d" : 4 }`

let doubled = doc.map { elem -> Int in
    guard case let value = .int64(value) else {
        return 0
    }

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

请注意,BSONDocument 符合 Collection 协议,因此可以使用 SequenceCollection 中的有用方法。 但是,这些方法中的许多方法的运行时保证尚未满足。

开发说明

请参阅我们的 开发指南,了解 MongoDB 驱动程序的入门信息。 要运行 BSON 库的测试,您可以使用 Makefile 并运行:make test-pretty(使用 xcpretty 更改输出格式)或仅运行 make test(对于没有 ruby 的环境)。

注意

此存储库以前包含用于 libbson 的 Swift 绑定,libbson 是 MongoDB C 驱动程序的 BSON 库。 这些绑定仍然可以在 2.1.0 标签下找到。 主要版本 3.0 及更高版本将用于 BSON 库。