BSON 5 is the fastest BSON library speeding past all libraries including C. It's compliant to the whole C BSON specification test suite, and even passes official libraries in compliance slightly.
It's not only fast, it's also got an extremely easy and intuitive API for extraction.
BSON is parsed and generated as specified for version 1.1 of the BSON specification.
The supported method for using this library is trough the Swift Package manager, like this:
import PackageDescription
letpackage=Package(
name:"MyApp",
dependencies:[.Package(url:"https://github.com/OpenKitten/BSON.git", majorVersion:5)])Create Documents naturally:
varuserDocument:Document=["username":"Joannis","online":true,"age":20,"pi_constant":3.14,"profile":["firstName":"Joannis","lastName":"Orlandos"]]letfavouriteNumbers:Document=[1,3,7,14,21,24,34]userDocument["favouriteNumbers"]= favouriteNumbersAccess values in an array like you would in Swift Arrays and values in an object like a Dictionary.
letfavouriteNumber=favouriteNumbers[0]letusernameValue=userDocument["username"]Extract types with simplicity:
letusername=String(userDocument["username"]) // "Joannis"
letisOnline=Bool(userDocument["online"]) // true
letage=Int(userDocument["age"]) // 20
letpi=Double(userDocument["pi_constant"]) // 3.14Chain subscripts easily to find results without a hassle as shown underneath using this JSON structure (assuming this is represented in BSON):
{
"users": [
{
"username": "Joannis",
"profile": {
"firstName": "Joannis",
"lastName": "Orlandos"
}
},
{
"username": "Obbut",
"profile": {
"firstName": "Robbert",
"lastName": "Brandsma"
}
}
]
}letobbutLastName=String(object["users"][1]["profile"]["lastName"]) // "Brandsma"Check the documentation for more information.
The performance in this BSON library is thanks to specialized algorithms per-operation with a centralized cache for indexed information. BSON is 100% lazy, so if you don't read data, it doesn't cost any performance.
All non-deprecated BSON 1.1 types are supported.
- Double
- String
- Document
- Array
- ObjectId
- Bool
- DateTime
- 32-bit integer
- 64-bit integer
- Null value
- Binary
- Regular Expression
- Min Key
- Max Key
- Timestamp
- Javascript Code
- Javascript Code with Scope
- Decimal128