查询firebase firestore db,其中collection具有带引用的对象

时间:2018-03-06 21:22:26

标签: firebase firebase-realtime-database google-cloud-firestore

我有一个关于来自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数据库以获取具有名称为“john”的用户的所有文档(来自系列集合)?

我没有运气就尝试了以下内容:

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

但它只返回一个空数组。

如果我从key切换用户条目:引用key:string对象它可以工作。但我想使用引用而不是字符串。

1 个答案:

答案 0 :(得分:1)

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数据建模的一般规则是以适合您要执行的查询的任何方式执行此操作。有时这涉及复制数据以适应这些查询。