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

查询集合中具有引用对象的firebase firestore数据库

万浩淼
2023-03-14

我有一个关于FireBase的firestore db的问题。

我有一个文档X,它包含一个名为users的字段,它是一个对象,引用了users集合中的用户。

它看起来与此类似:

families: [{
    xyz: {
        name:'foobar',
        users: {
            john: 'users/john', //reference to another document 
            mike: 'users/mike'  //reference to another document
        }
    }   
},
...]

我如何查询firestore db以获得所有的文档(来自家庭集合),这些文档的用户名为'john'?

我没有运气地尝试了以下几点:

db.collection('families')
.where('users.john', '<', '')

但它只返回一个空数组。

如果我将用户的条目从key:reference切换到key:string对象,它就可以工作。但我想用折射而不是弦。

共有1个答案

陆和泰
2023-03-14

Firestore没有提供查询字段简单存在性的方法。它用于查找文档的索引基于属性的值。现在,您的值是文档引用,因此您只能根据它们的引用值进行查询。

如果您想知道某个东西是否存在于文档中,您可以为它创建一个带有布尔值的新字段。然后您可以查询它是否正确。

families: [{
    xyz: {
        name:'foobar',
        users: {
            john: 'users/john', //reference to another document 
            mike: 'users/mike'  //reference to another document
        },
        users_exists: {
            john: true,
            mike: true
        }
    }
},

有了上面的users_exists,现在您可以这样查询:

db.collection('families')
.where('users_exists.john', '==', true)

NoSQL数据建模的一般规则是以任何适合您想要执行的查询的方式进行。有时这涉及到复制数据以适应那些查询。

 类似资料:
  • 我正在寻找允许我查询集合的Java库。我偶然发现了jFilter an JoSql。 然而,JoSql似乎自2010年以来一直处于非活动状态,只有2个版本。jFilter似乎相当新,自去年以来没有任何新版本。 当谷歌搜索它们中的任何一个时,搜索结果的数量很少,这向我表明它们没有被广泛使用。 你对这些图书馆有什么建议,或者知道更多的活动吗?

  • 问题内容: 假设Student是继承层次结构中的父类,该继承层次结构包含ComputerScienceStudent和ITStudent。Student定义了一个名为favoriteColors的字段,它是一个值类型的String集合。使用标准API,我想查询所有将“蓝色”列为其最喜欢的颜色之一的学生。 这是相关的Java代码段 我查看了http://docs.jboss.org/hibernat

  • 模板实体: 工作流实体: 指挥实体:

  • 问题内容: 我没有MS SQL(SQL Express 2008)的“完整”版本,所以我没有探查器工具。 我想查看由我的实体框架代码生成的SQL,但是我发现的所有示例都使用了 语法类型;但我的大部分查询更像是.. 语法类型。如何查看通过这种编码方式生成的SQL?有任何想法吗? 问题答案: Express Edition是否支持扩展事件?如果是这样,它将以类似于Profiler的方式捕获语句并sp完

  • 问题内容: 我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,喜爱的猫食等等。 Java集中存储了一堆猫,我需要查找所有3岁的猫,或者最喜欢猫粮的Whiskas。当然,我可以编写一个自定义方法来查找那些具有特定属性的Cat,但是这样做会麻烦许多属性。有一些通用的方法吗? 问题答案: 您可以编写一个采用接口实例的方法,该实例定义了一个方法,该方法可以通过所需的任何属性检查来实现。 更好的是,使其

  • 我有一个实体,包含s的嵌入式集合。 我想找到集合中与给定参数(字符串)匹配的所有s。 我想在JPQL中实现的一些伪代码: 但是,当我尝试此查询时: 它抛出: 我希望避免使用需要连接多个表的解决方案。这是伪代码,但实际查询中充满了大量复杂的大型企业sql where或and语句。所以越少加入越好。