【问题标题】:Angular Firestore query with where returns all docs in collection带有 where 的 Angular Firestore 查询返回集合中的所有文档
【发布时间】:2020-06-02 07:54:15
【问题描述】:

我有一个使用 Firestore 的 Angular 应用程序。每当我查询集合中满足特定条件的文档时,返回的数组包含集合中的每个文档。我不明白为什么会发生这种情况,因为我是following the documentation。

调用组件中的集合

this.FirebaseService.getDocsByParam( 'versions', 'projectId', this.projectData.uid )
    .then((snapshot) => {
        var tempArray = [];
        var docData;
        snapshot.forEach((doc) => {
            docData=doc.data();
            docData.uid=doc.id;
            tempArray.push(docData);
        });
        this.versionList = tempArray;
        this.versionData = this.versionList[this.versionList.length-1];
        this.initializeAll();
    })
    .catch((err) => {
      console.log('Error getting documents', err);
});

Firebase 服务发出调用

getDocsByParam( collection, getParam:string, paramValue:string ) {
    var docRef = this.afs.collection(collection, ref => ref.where(getParam, '==', paramValue));
    return docRef.ref.get();
}

以下是版本集合的屏幕截图。它显示了一个返回的文档,它甚至没有必填字段。

【问题讨论】:

    标签: javascript firebase google-cloud-firestore angularfire2


    【解决方案1】:

    当您在 AngularFirestoreCollection 上调用 docRef.ref 时,它会返回基础集合,而不是查询。所以你的return docRef.ref.get() 确实得到了整个收藏。

    我认为您可以使用docRef.query 来获取查询,但我什至认为这里根本没有任何理由使用 AngularFire 调用。由于您的代码已经在使用纯 JavaScript API 来处理文档,因此您不妨也坚持使用 getDocsByParam 中的那个 SDK:

    getDocsByParam( collection, getParam:string, paramValue:string ) {
        var docRef = this.afs.collection(collection).ref;
        return docRef.where(getParam, '==', paramValue).get();
    }
    

    【讨论】:

    • 上述sn-p中的“ref”是什么?如何从该回报中获取数据?
    • 获取这些数据的 Angular 方法是什么?是不是要用switchmap?
    • 抱歉,我一直忘记 AngularFire 的查询语法是如何工作的。我更新了我的答案,以展示如何在使用 AngularFire 构建对集合的引用时执行此操作。如果你想使用完整的 AngularFire 语法,你也可以这样做。但是您共享的调用 getDocsByParam(...) 的代码使用常规 JavaScript 语法,这就是我回答的原因。
    • 谢谢。这确实有效,但我感到沮丧的是,我觉得我尽可能地遵循了文档,并且我在使用 angular firestore 文档时遇到了很大的困难。他们在很多层面上都让我很困惑。
    • 对不起约书亚。如果您知道如何改进它们,该项目是开源的,通常非常欢迎贡献。
    猜你喜欢
    • 1970-01-01
    • 2018-05-09
    • 2021-07-29
    • 1970-01-01
    • 2021-09-17
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多