Firestore orderBy, смешанный с запросом, не работает для нумерации страниц - PullRequest
0 голосов
/ 26 февраля 2019
let currentDateTime = Date()

let time = Timestamp(date: currentDateTime)

guard let userUid = Auth.auth().currentUser?.uid else { return}

Firestore.firestore()
         .collection("\(user)/\(userUid)/\(timelinePath)")
         .order(by: "endDate").start(after: [lastKey ?? ""])
         .whereField("endDate", isLessThan: time).limit(to: 5)

Я пытаюсь заказать, используя поле endDate, которое является отметкой времени, а затем получаю только данные с прошедшей датой, которые я проверяю с помощью запроса whereField.Проблема кажется при заказе.Это не заказывает метку времени.Можно ли это исправить или есть другой способ сделать это?

Правка - есть ли возможность заказать по TimeStamp?Я не могу заказать что-либо еще, так как первый запрос по метке времени, заказ должен следовать тому же запросу

Here is my data structure

1 Ответ

0 голосов
/ 26 февраля 2019

Это может помочь.Следующий код устанавливает дату отметки времени и извлекает все события до этого времени из FireStore.

let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd"
let dateString = "2019/02/20"
let timestamp = formatter.date(from: dateString)

let timelineRef = self.db.collection("Timeline")
    .order(by: "endDate")
    .whereField("endDate", isLessThan: timestamp)
    // you can add .limit(to: 3) if you only want the 3 oldest for example

timelineRef.getDocuments() { (querySnapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else {
        for document in querySnapshot!.documents {
            let docId = document.documentID
            let name = document.get("selfKey") as! String
            print(selfKey)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...