如何从Firestore获取数组值?

问题描述

我将以下所示的数据结构存储在Cloud Firestore中。我已将公司记录保存在Firestore数据库中,我想检查我的域是否存在于公司的域数组中,如果是,那么我希望所有公司数据作为响应,但我不知道如何使用Firestore来实现。

enter image description here

在这里,我已经标记了域。让我解释更多, 例如,如果我的域名是“ abcinfo.in”,那么我想检查它是否已经存在于任何partner_company域中,并且在这里与该partner_company链接,因此它应该返回我partner_company的所有数据。就是这样。

我尝试使用下面的代码,但是当有单个值时它会有所帮助,但是在这里我需要从数组中检查

 var domaindata = db.collection('partner_company').where('company_domain','==',_user.domain);
  domaindata.get().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      console.log(doc.id,' => ',doc.data());
    });
  });

因此,请向我建议任何更好的方法获取所需的数据。 谢谢。

解决方法

Firebase具有用于数组过滤的简洁功能: array-contains array-contains-any 。它们可以用作查询运算符。

使用array-contains筛选必须匹配的值的数组。 以下查询将解析您的测试文档:

db.collection('partner_company').where('company_domain','array-contains',['abcinfo.in','newtest.com'];

array-consides-any在另一侧的过滤器中至少包含一个匹配值。

db.collection('partner_company').where('company_domain','array-contains-any',['definfo.in','newtest.com'];

详细了解Firebase here中的数组成员身份

,

您可以执行以下操作:

var domaindata = db.collection('partner_company').where('company_domain',_user.domain);

这将检查数组company_domain是否包含传递的域。

检查以下内容:

https://firebase.google.com/docs/firestore/query-data/queries#array_membership