如何使用where条件从firebase获取值

时间:2019-08-30 06:08:37

标签: javascript angular firebase google-cloud-firestore angularfire2

我是Firebase的新手。为什么我无法获得所要查询的内容。 在其他查询中,我实际上可以看到有效负载,但是在此查询中我看不到。这是我在firebase中的数据库的架构:

enter image description here

我需要获取具有所需日期的数据。这就是我创建查询的方式:

    getSalesForToday() {
    const data = this.fireStore.collection(
      'Sales', ref => ref.where('TransactionDate', '==', formatDate(new Date, 'yyyy/MM/dd', 'en'))
      );
    console.log(data);
  }

但是除了这个以外,它没有给我任何结果:

AngularFirestoreCollection {ref: CollectionReference, query: Query, afs: AngularFirestore}
afs: AngularFirestore {scheduler: FirebaseZoneScheduler, firestore: Firestore, persistenceEnabled$: Observable}
query: Query {_query: Query, firestore: Firestore}
ref: CollectionReference {_query: Query, firestore: Firestore}
__proto__: Object

我需要你的帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

您需要创建并执行查询:

getSalesForToday() {

    let query = ref.where('TransactionDate', '==', 
    formatDate(new Date, 'yyyy/MM/dd', 'en'))
    .get()
    .then(snapshot => {
        if (snapshot.empty) {
          console.log('No matching documents.');
          return;
        }  

        snapshot.forEach(doc => {
          // Do something
          console.log(doc);
        });
      })
      .catch(err => {
        console.log('Error getting documents', err);
      });
    }
  

ref必须是对预期包含以下内容的集合的引用   值。

答案 1 :(得分:0)


    const data = this.fireStore.collection(
      'Sales', ref => ref.where('TransactionDate', '==', formatDate(new Date, 'yyyy/MM/dd', 'en'))
      );

fireStore.collection仅返回可观察值。您仍然需要订阅此Observable才能使用数据。


const data$ = this.fireStore.collection('Sales',
                   ref => ref.where('TransactionDate', '==', formatDate(new 
                                     Date,'yyyy/MM/dd', 'en')));

// Subscribing to collection observable to log out the data
data$.subscribe(data => console.log(data))


请记住,只要不使用此订阅,就需要取消订阅。 另外,请检查async pipe以获得有关在角度https://angular.io/api/common/AsyncPipe中使用可观察物的最佳做法的更多信息