Похоже, вы пытаетесь создать дополнительные документы в узле проектов и обновить частный пользовательский узел. Если это так, код в вопросе не будет работать.
UpdateData: обновляет поля в документе, на который ссылается документ. Если
документ не существует, запись не удастся.
Вот рабочая функция пакетной записи, которая добавляет документ в узел проектов с идентификатором документа, сгенерированным Firestore и дочерними полями для расширения, ownerId и типа, а также коллекцию user_private с документом с идентификатором документа id_0.
func batchWrite() {
let batch = self.db.batch()
let ref = self.db.collection("projects").document()
let project: [String: Any] = [
"ownerId": "id_0",
"type" : "audio",
"extensionUrl" : "some url"
]
batch.setData(project, forDocument: ref)
let privateRef = self.db.collection("user-private").document("id_0")
let privateUpdate: [String: Any] = [
"projects" : "some projects"
]
batch.setData(privateUpdate, forDocument: privateRef)
batch.commit(completion: { (error) in
if let error = error {
print("error updating database: \(error.localizedDescription)")
} else {
print("Database updated successfully!!!!!")
}
})
}
Обратите внимание, что self.db является ссылкой на класс var моего Firestore. Это позволяет вам не вводить Firestore.firestore()
и использовать self.db
.
Также обратите внимание, что в этом случае, вероятно, пакет не требуется, так как, по-видимому, одновременно не происходит значительного количества записей.
Если вы не используете пакетный режим, .addDocument добавит документы в коллекции.
Вот функция, которая записывает задачу в коллекцию задач и автоматически генерирует documentId
func writeTask() {
let collectionRef = self.db.collection("tasks")
let data = [
"task": "some task"]
var ref: DocumentReference? = nil
ref = collectionRef.addDocument(data: data, completion: { err in
if let error = err {
print(error.localizedDescription)
}
print(ref?.documentID)
})
}