如何按'_createTime'对firestore文档进行排序?

Posted

技术标签:

【中文标题】如何按\'_createTime\'对firestore文档进行排序?【英文标题】:How to sort firestore documents by '_createTime'?如何按'_createTime'对firestore文档进行排序? 【发布时间】:2020-08-06 05:54:23 【问题描述】:

我正在使用带有 Admin SDK 的 Cloud Firebase 功能从我的 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】:

按照您当前的做法使用字段是正确的方法。您不能对元数据“,_createTime”进行排序。根据https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document:“如果您希望能够按创建日期对文档进行排序,则应将时间戳作为字段存储在文档中。”

【讨论】:

以上是关于如何按'_createTime'对firestore文档进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何使用 Angular 按 TimeStamp 数据类型对 Firebase Firestore 数据进行排序?

Flutter 使用 Streambuilder 对数据 Firestore 进行排序

如何按字段值(即“原因”字段名称及其值可能是“垃圾邮件”、“裸露”等)对 Firebase Firestore 数据进行排序

如何在 Firebase 云 Firestore 中查询一个字段然后按另一个字段排序?

Firestore:加入与 Firestore 定价

如何按文档 ID 从 Firebase Firestore 获取数据 - iOS?