从firestore数据库中获取倒数第二个记录,使用javascript。

10

由于Firestore还比较新,因此在某些情况下很难找到相关的帮助。

我正在尝试从Firestore中获取倒数第二条记录,但它却返回了第一条记录。我知道这是错误的查询:

db.collection("batches")
  .where('added_at', "<", paymentData.added_at) //Here paymentData is last record
  .limit(1).get().then(function(prevSnapshot){
})

例如,我有3条记录。
A. added_at: 1 Jan, 2017
B. added_at: 2 Jan, 2017
C. added_at: 3 Jan, 2017

我现在的paymentData里有C,我想记录B。但是它却记录了A

我该如何获取倒数第二条记录

编辑:

每条记录的时间戳都比前一条新(即使只相差1分钟,例如之前的2017年1月27日下午5:20和新的2017年1月27日下午5:21

而且paymentData总是有最新的记录

基本上我想比较当前支付上一个支付的两个值,并将它们的差异显示给用户。

1个回答

13
Firestore文档的顺序不能保证,除非你在查询中指定文档的顺序。为此,你需要使用orderBy()方法。
例如,你可以指定数据库按降序排序文档的added_at字段,这将返回你所需的结果B
db.collection("batches")
  .orderBy('added_at', 'desc') // Order documents by added_at field in descending order
  .where('added_at', "<", paymentData.added_at)
  .limit(1).get().then(function(prevSnapshot){
          // ...
  })

不过要小心:具有相同时间戳或在您预期的时间戳之间的多个文档可能意味着您将收到与预期不同的文档,因此我不会依赖它来选择特定的文档。


不好意思,它给我返回的是文档 AAadded_at2017年10月21日 下午12:13:17Badded_at2017年10月21日 下午12:11:54,而 Cadded_at2017年10月21日 下午12:09:42 - Noman Ali
但是它们也有嵌套的子元素,带有时间戳,这会造成问题吗? - Noman Ali
{btsdaf} - Grimthorr
{btsdaf} - Noman Ali
{btsdaf} - Grimthorr
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接