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个字段: titlevideo_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)

同样,当组合whereorder时 ,Firebase指出:

但是,如果您的过滤器具有范围比较( < <= > >= ),则您的第一次排序必须在同一字段上。

 城市参考 
.whereField(“ population”,isGreaterThan:100000)
.order(通过:“人口”)
 城市参考 
.whereField(“ state”,isGreaterThanOrEqualTo:“ CA”)
.whereField(“ population”,isGreaterThan:1000000)