Как отсортировать документы firestore по _createTime? - PullRequest
0 голосов
/ 06 августа 2020

Я использую облачную функцию Firebase с Admin SDK, чтобы получить самый последний документ из моей коллекции Firestore. Заказ основан на поле timestamp. Это значение явно указывается при записи документа.

Код получения :

const fetchedTransaction = (await transactionsColRef.orderBy('timestamp', 'desc')
                .limit(1).get()).docs[0]

console.log(fetchedTransaction)
console.log('Transaction created at', fetchedTransaction.createTime.toDate())

Операторы console.log выводят следующий результат. Посмотрите на _createTime внизу.

Вывод :

QueryDocumentSnapshot {
  _fieldsProto: {
    coinsToday: { doubleValue: 0.017, valueType: 'doubleValue' },
    timestamp: { timestampValue: [Object], valueType: 'timestampValue' }
  },
  _ref: DocumentReference {
    _firestore: Firestore {
      _settings: [Object],
      _settingsFrozen: true,
      _serializer: [Serializer],
      _projectId: 'hidden',
      registeredListenersCount: 0,
      _lastSuccessfulRequest: 1596692513232,
      _backoffSettings: [Object],
      _preferTransactions: false,
      _clientPool: [ClientPool]
    },
    _path: QualifiedResourcePath {
      segments: [Array],
      projectId: 'hidden',
      databaseId: '(default)'
    },
    _converter: {
      toFirestore: [Function: toFirestore],
      fromFirestore: [Function: fromFirestore]
    }
  },
  _serializer: Serializer {
    createReference: [Function (anonymous)],
    allowUndefined: false
  },
  _readTime: Timestamp { _seconds: 1596692513, _nanoseconds: 164886000 },
  _createTime: Timestamp { _seconds: 1596692167, _nanoseconds: 68734000 },
  _updateTime: Timestamp { _seconds: 1596692167, _nanoseconds: 68734000 }
}

Transaction created at 2020-08-06T05:36:07.069Z

Я ищу способ упорядочить документы по _createTime вместо того, чтобы писать timestamp значение каждый раз. Использование orderBy('_createTime') или orderBy('createTime') не помогло.

1 Ответ

3 голосов
/ 06 августа 2020

Использование поля, как вы сейчас делаете, - правильный путь. Вы не можете заказать метаданные ', _createTime'. Согласно https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document: «Если вы хотите иметь возможность упорядочивать свои документы по дате создания, вы должны сохранить отметку времени в виде поля в документах».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...