Firestore - создание нескольких документов одновременно с использованием значения Int из querySnaphot - PullRequest
0 голосов
/ 13 июня 2018

На данный момент я понял, что когда пользователь нажимает кнопку, все документы в FirstCollection затем копируются в коллекцию под названием SecondCollection, которая хорошо работает!

Что я 'Теперь я хотел бы использовать значение Int из поля (numberValue) во всех документах из вновь созданной коллекции под названием SecondCollection.Затем используйте эти значения для создания нескольких документов во вложенной коллекции с именем «SecondSubCollection» документа.

Так, например, скажем, если numberValue равно 3 в одном документе, я хотел бы выполнить пакетный запрос и создать3 документа под вложенной коллекцией под названием «SecondSubCollection» документа.Затем сделайте это для всех документов в SecondCollection одним запросом.

Пожалуйста, посмотрите код ниже того, что я получил до сих пор.В тот момент, когда я нажимаю на кнопку, он создает только один документ в каждой из подколлекций, что не работает так, как я хочу.Я бы хотел, чтобы он создавал несколько документов (если numberValue равно 3 в документе, он должен создавать 3 документа во вложенной коллекции документа).

Надеюсь, это имеет больше смысла!Любая помощь будет принята с благодарностью, спасибо !!

Код

@IBAction func goButton(_ sender: UIButton) {

    let userRef = db.collection("Users").document(user!)

    userRef.collection("SecondCollection").document(firstID).setData(["name" : "name"]) {
        error in

        if let error = error {
            print("Error adding document: \(error.localizedDescription)")
        } else {
            print("Document added with ID")
        }
    }

    let firstRef = userRef.collection("FirstCollection")

    firstRef.getDocuments { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            if let snapshot = querySnapshot {
                for document in snapshot.documents {
                    let data = document.data()
                    let name = data["name"] as? String ?? ""
                    let numberValue = data["numberValue"] as? Int ?? Int()
                    let batch = self.db.batch()
                    let docset = querySnapshot

                    let integerArray = [Int](1...numberValue)

                    let secondID = UUID().uuidString

                    let secondRef = userRef.collection("SecondCollection").document(secondID)

                    docset?.documents.forEach {_ in batch.setData(["name" : name, "numberValue" : numberValue], forDocument: secondRef)}

                    \\ the code that isn't working properly at the moment
                    let secondSubRef = secondRef.collection("SecondSubCollection").document()
                    docset?.documents.forEach {integerArray in batch.setData(["value" : Int], forDocument: secondSubRef)}


                    batch.commit(completion: { (error) in
                        if let error = error {
                            print("\(error)")
                        } else {
                            print("success")
                        }
                    })
                }
            }
        }
    }
}

Что она делает в данный момент

  1. FirstCollection :

    • documentID.
      • name: name.
      • numberValue: 3.
    • documentID.
      • имя: имя.
      • число Значение: 2.
  2. SecondCollection :

    • documentID.
      • имя: имя.
      • числоЗначение: 3.
      • SecondSubCollection .
        • documentID.
          • значение: 1.
    • documentID.
      • name: name.
      • numberValue: 2.
      • SecondSubCollection .
        • documentID.
          • значение: 1.

Что бы янравится делать

  1. FirstCollection :

    • documentID.
      • имя: имя.
      • номер Значение: 3.
    • documentID.
      • имя: имя.
      • число Значение: 2.
  2. SecondCollection :

    • documentID.
      • name: name.
      • numberValue: 3.
      • SecondSubCollection .
        • documentID.
          • значение: 1.
        • documentID.
          • значение: 2.
        • documentID.
          • значение: 3.
    • documentID.
      • имя: имя.
      • число Значение: 2.
      • SecondSubCollection .
        • documentID.
          • значение: 1.
        • documentID.
          • значение: 2.

1 Ответ

0 голосов
/ 14 июня 2018

Вот мое рабочее (упрощенное) решение: (Большое спасибо Джею за огромную помощь!)

@IBAction func goButton(_ sender: UIButton) {

    let userRef = db.collection("Users").document(user!)

    let array = [1, 2, 3]

    array.forEach { number in

        let batch = self.db.batch()

        let docRef = userRef.collection("FirstCollection").document()

        batch.setData(["numberValue" : number], forDocument: docRef)

    }

    batch.commit(completion: { (error) in
        if let error = error {
            print("\(error)")
        } else {
            print("success")
        }
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...