洛达什:订单如何在没有订单字段的情况下将文档放在订单列表的顶部



我正在使用firebase&firestore和我有一个名为singers的旧收藏,其中包含一些结构文件,例如

name: string
genre: string,
...

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

我做了什么

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

  1. 没有字段createdAt的所有歌手,具有随机顺序或任何其他字段
  2. 字段createdAt顺序从最老到最新的歌手

示例数据:

const singers = [
{
name: 'Phil',
genre: 'Pop',
...
}, 
{
name: 'Bom',
genre: 'Rock',
...
}, 
{
name: 'Tom',
genre: 'Hiphop',
createdAt: 190000000,
...
},
{
name: 'John',
genre: 'Hiphop',
createdAt: 195000000,
...
},
]
const sortedSingers = orderBy(
singers, // collection with all singers from firestore 
[singer => (singer.createdAt?? singer.name)],
['desc'],
);

它以错误的顺序呈现:

  1. 汤姆
  2. 约翰
  3. Bom
  4. 菲尔

我想这样订购:

  1. 博姆/菲尔
  2. Bom/Phil
  3. 汤姆
  4. 约翰

如何使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']);

相关内容

  • 没有找到相关文章