按对象查询Firestore集合

时间:2017-10-15 18:21:38

标签: firebase google-cloud-firestore

我创建了一个名为“books”的集合,在其中我创建了一个名为“users”的对象(又名.dict)。那个对象看起来像这样:

users: {
    5PPCTcdHOtdYjGFr7gbCEsiMaWG3: firebase.firestore.FieldValue.serverTimestamp()
}

现在我想查询属于某个用户的所有图书。我试过这个:

this.db
  .collection('books')
  .where(`users.${this.state.currentUser.uid}`, '>', 0)
  .onSnapshot(querySnapshot => {
      ...

我从未收到任何文件。我确定它应该匹配。

screenshot of Firestore console

为了检查我的理智,如果我删除where(...)部分,我会收到文件。只是我为所有用户提供了文档。

我控制台在.where()中记录了该字符串并且看起来正确。

2 个答案:

答案 0 :(得分:2)

我也无法使用.where(),但它似乎可以使用.orderBy(),替换:

.where(`users.${this.state.currentUser.uid}`, '>', 0)

.orderBy(`users.${this.state.currentUser.uid}`)

答案 1 :(得分:2)

您的查询错误,因为您正在将日期对象与数字进行比较,因此有两个不同的事情。您可以通过在下面运行以下两行代码来检查它。

  console.log(typeof(firebase.firestore.FieldValue.serverTimestamp()))
  console.log(typeof(0))

所以你有两个选择:

1 - 您可以将日期对象与下面的数据对象进行比较。

this.db
  .collection('books')
  .where(`users.${this.state.currentUser.uid}`, '>', new Date(0))
  .onSnapshot(querySnapshot => {
      ...

2 - 或者您可以用毫秒保存日期并将其与数字进行比较。

users: {
    5PPCTcdHOtdYjGFr7gbCEsiMaWG3: new Date().getTime();
}

 this.db
      .collection('books')
      .where(`users.${this.state.currentUser.uid}`, '>', 0)
      .onSnapshot(querySnapshot => {
          ...