iOS版Cloud Firestore入门
选择在测试模式下启动,这样我们就可以执行读取和写入操作。
现在,您将能够看到您的数据库。 您可以手动添加一些集合/文档以进行尝试。
为您的应用初始化Firebase
打开您的AppDelegate文件并导入Firebase。
导入Firebase
在应用程序didFinishLaunchingWithOptions方法内部,添加此行。
FirebaseApp.configure()
打开要在其中执行对Firestore数据库的读/写操作的ViewController。 导入数据库。
导入FirebaseFirestore
并创建要使用的数据库实例。
var db:Firestore!
db = Firestore.firestore()
新增资料
添加具有生成ID的新文档
db.collection(“ books”)。addDocument(data:[
“ title”:“要杀死一只知更鸟”,
“ author”:“ Harper Lee”,
“已发布”:1960年))
{错误
如果让err = err {
print(“添加文档时出错:\(err)”)
}其他{
print(“添加了ID的文档:\(ref!.documentID)”)
}
}
添加具有指定ID的新文档
db.collection(“ cities”)。document(“ SF”)。setData([
“名称”:“旧金山”,
“ state”:“ CA”,
“国家”:“美国”,
“大写”:false,
“人口”:860000,
“区域”:[“ west_coast”,“北”
])
阅读集合中的所有文档
db.collection(“ books”)
.getDocuments(){(querySnapshot,err)在
如果让err = err {
print(“获取文档时出错:\(err)”)
}其他{
用于querySnapshot!.documents中的文档{
print(“ \(document.documentID)=> \(document.data())”)
}
}
}
通过ID读取集合中的特定文档
db.collection(“ cities”)。document(“ SF”)
.getDocument {(文档,错误)在
如果让document = document,则document.exists {
让dataDescription = document.data()。map(String.init(describing :))?? “零”
print(“文档数据:\(dataDescription)”)
}其他{
打印(“文档不存在”)
}
}
将结果投射到自定义对象
首先,为您的对象创建一个Codable结构。 对于这个简单的示例,我们有一个VideoObj,它只有2个字段: title和video_id 。
struct VideoObj:可编码{
var video_id:字符串
var标题:字符串
}
在您的ViewController中,创建一个JSONDecoder实例,
让解码器= JSONDecoder()
当您检索数据时,可以将其转换为JSON并对其进行解码。
db.collection(“视频”)
getDocuments(){(querySnapshot,err)在
如果让err = err {
print(“获取文档时出错:\(err)”)
}其他{
用于querySnapshot!.documents中的文档{
做{
让jsonData =试试吗? JSONSerialization.data(withJSONObject:document.data())
让vid =试试self.decoder.decode(VideoObj.self,来自:jsonData!)
self.videosArray.add(vid)
}捕获让错误{
打印(error.localizedDescription)
}
}
}
}
另外,您可以使用这个很棒的库Codable Firebase。
筛选资料
您可以在Firestore数据库上执行简单和复合查询。 该查询等效于SQL where子句。 例如,以下代码将返回所有给定字段值为true的文档。
db.collection(“ products”)。whereField(“ instock”,isEqualTo:true)
.getDocuments(){(querySnapshot,err)在
如果让err = err {
print(“获取文档时出错:\(err)”)
}其他{
用于querySnapshot!.documents中的文档{
print(“ \(document.documentID)=> \(document.data())”)
}
}
}
单个where子句的其他一些示例。
prodRef.whereField(“ instock”,isEqualTo:true)
prodRef.whereField(“ category”,isEqualTo:“ books”)
prodRef.whereField(“ price”,isLessThan:1000)
bookRef.whereField(“ name”,isGreaterThanOrEqualTo:“要杀死一只知更鸟”)
prodRef.whereField(“ sizes”,arrayContains:“ small”)
复合查询
Firestore允许组合多个where子句,但有一些限制。 从Firebase文档中:
您还可以链接多个where()方法来创建更具体的查询(逻辑AND)。 但是,要将相等运算符(==)与范围或array-contains子句(<,,> =或array_contains)组合,请确保创建一个复合索引。
您只能在单个字段上执行范围比较(<,,> =),并且在复合查询中最多可以包含一个array_contains子句:
复合查询的一些示例是:
城市参考
.whereField(“ state”,isEqualTo:“ CO”)
.whereField(“ name”,isEqualTo:“ Denver”)
城市参考
.whereField(“ state”,isEqualTo:“ CA”)
.whereField(“ population”,isLessThan:1000000)
城市参考
.whereField(“ state”,isGreaterThanOrEqualTo:“ CA”)
.whereField(“ population”,isGreaterThan:1000000)
顺序和限制
默认情况下,查询返回查询满意的所有文档,并且此结果按文档ID的升序排列。
但是您可以指定结果的顺序和限制。
cityRef.order(按:“名称”)。limit(至:3)
对于降序
cityRef.order(按:“名称”,降序:true)。limit(至:3)
按多个字段排序
cityRef.order(按:“州”)
.order(按:“人口”,降序:true)
同样,当组合where和order时 ,Firebase指出:
但是,如果您的过滤器具有范围比较(
<
,<=
,>
,>=
),则您的第一次排序必须在同一字段上。
城市参考
.whereField(“ population”,isGreaterThan:100000)
.order(通过:“人口”)
城市参考
.whereField(“ state”,isGreaterThanOrEqualTo:“ CA”)
.whereField(“ population”,isGreaterThan:1000000)