当前位置: 首页 > 知识库问答 >
问题:

如何在Firestore上进行两个不同文档之间的复合查询?[副本]

邬友樵
2023-03-14

以这个结构为例:

- Users (root collection)
  - User (document)
    - userId
    - username
    - ...
    --- Personalization (subcollection)
        --- Alerts (document)
            - myTags (array of strings)
            - ...
        --- Location (document)
            - region (string)
            - ...

我想执行一个查询,首先验证用户区域(/users/{userId}/personalization/location)是否等于参考值。如果是,我希望它验证数组mytags(/users/{userId}/personalization/alerts)是否包含某个标记。

这是我到目前为止能找到的最接近的东西:

db.collectionGroup('Personalization').where('region', '==', 'California').where('myTags', 'array-contains', 'Macbook')
    .get().then(querySnapshot => {
        if (querySnapshot.empty) {
            console.log('Result is empty');
        } else {
            console.log('Result found. ', querySnapshot.size, ' result(s).');
        }
        querySnapshot.forEach(doc => {
            console.log(doc.id, ' => ', doc.data());
        });
    }).catch(error => {
        console.error(error);
    });
    --- Personalization (subcollection)
        --- Alerts (document)
            - myTags (array of strings)
            - region (string)
            - ...
db.collectionGroup('Personalization').where('myTags', 'array-contains', 'Macbook').get().then(querySnapshot => {
    querySnapshot.forEach(element => {
        console.log('Search only by tag => ', element.id, ' => ', element.data());
    });
  • 此代码是为在Firebase上部署函数开发的,每当我拥有的某个集合上出现onWrite事件时,它就会触发。

此外,如果有人知道一些关于Firestore的复合查询的好例子,我将不胜感激。我已经阅读了文档,并看到了Firebase团队解释Firestore如何工作的几个视频,但我觉得缺乏更复杂的示例来理解它在实践中的工作方式。

共有1个答案

严兴言
2023-03-14

Firestore目前不支持逻辑或类型查询,您可以提供多个条件进行匹配:

  • 如何在Cloud FireStore中使用逻辑或执行复合查询?

如您所见,它只支持逻辑AND。当提供两个where子句时,查询将只给出满足这两个条件的文档。

    null
 类似资料:
  • 我试图创建一个查询来获取一个firestore集合/文档,其中userId等于当前userId,或者当前userId等于contributorsid。 我想让它给我所有陈述属实的文档。但它只返回第一个。如果我选择只包含其中一个查询(“where”),它们都会工作并返回正确的文档。

  • 问题内容: 由于ORFirestore中没有逻辑运算符,因此我尝试在本地合并2个单独的查询。 现在,我想知道如何保持结果的正确顺序。当我独立运行2个查询时,我无法明确地查询结果(至少不是我使用该orderBy方法从Firestore获取结果的顺序)。 我的想法是将第二个查询放在第一个查询的内部。这是一个坏主意的表现明智的选择吗? 问题答案: 要在本地合并2个单独的查询,建议您使用方法。您可以使用以

  • 问题内容: 以下查询: 什么也不返回。 我应该有足够多的数据来使查询工作。我究竟做错了什么? 问题答案: 您的第二个日期早于您的第一个日期(即,您正在查询2010年9月29日至2010年1月30日之间)。尝试颠倒日期的顺序:

  • 学生拥有诸如 并且有这样的文档 还有一个名为“学生-课程”的第三个集合,我在那里保存了学生的id和他们相应的课程id。像这样

  • 在Firestore中,我有一个用户集合,在每个用户文档中存储一个名为favorites的集合,该集合包含标记为favorites(存储)的文档的ID 我可以采取另一种方法来获取两个集合并手动过滤它们,但我使用的是Firebase RecycerView适配器,它显示的所有数据都基于查询,这将使事情更加高效。 这样的结果是如何实现的呢?如果需要进一步的解释,请告诉我

  • 问题内容: 我有两个文件,并且我想对两个文件进行逐行操作。(换句话说,每个文件的第一行都与之对应,第二行等等)。现在,我想到了一些稍微麻烦的方法来同时遍历两个文件。 但是 ,这是Python,因此我认为这里有一些语法速记。 换句话说,是否有一些简单的方法可以适应 这样就可以同时从两个文件中提取数据? 问题答案: Python 2: 使用加入了两个迭代器。 如果文件长度不相等,请使用。 在Pytho