Я пытаюсь написать запрос в Firestore, используя ссылочный тип.Я проверил документацию и некоторые вопросы по SO, но не понял, как использовать ссылки в тех или иных условиях.Я понимаю, что поле ссылки может помочь мне получить документ, на который оно ссылается, потому что ссылка - это путь.У меня есть структура один к одному, и я хотел бы получить документы по ее ссылке в «обратном» направлении.В то же время у меня есть другие таблицы со структурой один ко многим.И я хочу использовать тот же подход с ними.
Вот моя структура.Это один в один.Один документ в коллекции activeSessions должен иметь только один соответствующий документ в коллекции таблиц:
Root collection
|
|
-- tables (collection)
| |
| |
| -- tableName
| |
| -- tableCapacity
|
|
-- activeSessions (collection)
|
|
-- openTime
|
-- tableReference (reference that contains path to one of tables document.)
Поэтому я хотел бы получить документ из коллекции activeSessions, в котором есть ссылка на документ, который у меня уже есть.Я попробовал следующую функцию, но она возвращает документ для любого табличного документа.
class func getActiveSession (forTable table: TablesTable, completion: @escaping (TableSessionTable?, Error?) -> Void) {
// table.firebaseID contains unique id of the table document.
// let userData = appDelegate.db.collection("usersData").document(userId)
let tableReference = userData.collection("tables").document(table.firebaseID!)
print(table.firebaseID)
print (tableReference)
let tableSessionCollection = userData.collection("activeSessions")
tableSessionCollection.whereField("tableReference", isEqualTo: tableReference)
tableSessionCollection.addSnapshotListener { (snapshot, error) in
if let error = error {
completion(nil, error)
return
}
if let snapshot = snapshot {
let ref = data["tableReference"] as! DocumentReference
print("tablesession reference is to \(ref.documentID)")
print(ref)
completion(tableSession, error)
}
}
}
В соответствии с этим вопросом все должно работать нормально.Но это не так.Я поместил несколько отпечатков в свою функцию, и в соответствии с выводом он возвращает один документ из запроса tableSession два раза.Это ссылки на один и тот же documentID.Но в то же время экземпляры объекта DocumentReference различны:
Optional("12tVcpi93aPbN8qWmtLx")
<FIRDocumentReference: 0x6000011e76e0>
Optional("s7FCXMlCdx61OmtHyQvy")
<FIRDocumentReference: 0x6000011e5b60>
tablesession reference is to s7FCXMlCdx61OmtHyQvy
<FIRDocumentReference: 0x6000011e3600>
tablesession reference is to s7FCXMlCdx61OmtHyQvy
<FIRDocumentReference: 0x60000119b4c0>