Firebase Lodash:orderBy如何将文档放在已排序列表的顶部,而不包含我们排序依据的字段?

Firebase Lodash:orderBy如何将文档放在已排序列表的顶部,而不包含我们排序依据的字段?,firebase,google-cloud-firestore,lodash,Firebase,Google Cloud Firestore,Lodash,我使用的是firebase&firestore,我有一个名为singers的旧集合,其中包含一些结构文档,例如 name: string genre: string, ... 现在,我需要从前端的集合中订购这些文档,并且需要从最旧的文档到最新的文档,但是如果没有像createdAt这样的字段,我就无法完成,因为firestore不提供有关文档创建时间的任何信息 我所做的 首先在注册中添加了字段createdAt,现在新创建的歌手有字段createdAt,但旧歌手没有。所以我想按顺序订购: 所

我使用的是firebase&firestore,我有一个名为
singers
的旧集合,其中包含一些结构文档,例如

name: string
genre: string,
...

现在,我需要从前端的集合中订购这些文档,并且需要从最旧的文档到最新的文档,但是如果没有像
createdAt
这样的字段,我就无法完成,因为firestore不提供有关文档创建时间的任何信息

我所做的

首先在注册中添加了字段
createdAt
,现在新创建的歌手有字段
createdAt
,但旧歌手没有。所以我想按顺序订购:

  • 所有没有字段
    的歌手以随机顺序或任何其他字段创建DAT
  • 带有字段
    createdAt
    的歌手从最老到最新排序
  • 示例数据:

    const singers = [
      {
        name: 'Phil',
        genre: 'Pop',
        ...
      }, 
      {
        name: 'Bom',
        genre: 'Rock',
        ...
      }, 
      {
        name: 'Tom',
        genre: 'Hiphop',
        createdAt: 190000000,
        ...
      },
      {
        name: 'John',
        genre: 'Hiphop',
        createdAt: 195000000,
        ...
      },
    ]
    
    
    并且它以错误的顺序呈现:

  • 汤姆
  • 约翰
  • 物料清单
  • 菲尔
  • 我想点这样的菜:

      const singerCreatedAt: any = singers.map((singer: Singer) =>
        singer.createdAt
          ? { ...singer, createdAt: singer.createdAt?.toDate() }
          : { ...singer, createdAt: new Date(190000000000) },
      );
    
      const sortedSingers = orderBy(singerCreatedAt, ['createdAt', 'asc']);
    
  • 伯明翰/菲尔
  • 伯明翰/菲尔
  • 汤姆
  • 约翰

  • 如何使
    orderBy
    使没有排序字段的文档位于列表的开头?

    我做了如下操作:

      const singerCreatedAt: any = singers.map((singer: Singer) =>
        singer.createdAt
          ? { ...singer, createdAt: singer.createdAt?.toDate() }
          : { ...singer, createdAt: new Date(190000000000) },
      );
    
      const sortedSingers = orderBy(singerCreatedAt, ['createdAt', 'asc']);