Firebase Firestore:按对象的属性查询文档

Firebase Firestore:按对象的属性查询文档,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有一个联系人集合,其结构如下: name: 'XPTO Company', emails: { susan@xpto.com: { name: 'Susan', text: 'manager' }, fred@xpto.com: { name: 'Fred', text: 'marketing' } } 如何使用电子邮件检索文档susan@xpto.com" 比如: firebase.firestore().collection('contacts') .whe

我有一个联系人集合,其结构如下:

name: 'XPTO Company',
emails: { 
    susan@xpto.com: { name: 'Susan', text: 'manager' },
    fred@xpto.com: { name: 'Fred', text: 'marketing' }
}
如何使用电子邮件检索文档susan@xpto.com"

比如:

firebase.firestore().collection('contacts')
      .where(new firebase.firestore.FieldPath('emails', email), '==', true).get()
      .then(snap => {
      })

您可以将保存电子邮件地址的属性
id
添加到电子邮件对象中。并将电子邮件对象键中的“.”替换为“-”,例如
susan@xpto-com
,因此您的数据结构如下所示:

name: 'XPTO Company',
emails: { 
    susan@xpto-com: { id: 'susan@xpto.com', name: 'Susan', text: 'manager' },
    fred@xpto-com: { id: 'fred@xpto.com', name: 'Fred', text: 'marketing' }
然后您可以通过电子邮件检索文档susan@xpto.com"这样:

firebase.firestore().collection('contacts')
      .where('emails.susan@xpto-com.id', '==', 'susan@xpto.com').get()
      .then(snap => {
      })

你的提议不起作用吗?不起作用。Think仅适用于布尔值,而不适用于对象。您能为个人联系人创建公司的子集合吗?@JasonBerryman我很确定您当前不能按子集合进行查询。他们提到,如果我们想做这样的事情,我们应该重新构造数据。这取决于您需要从何处进行查询。如果你知道某个联系人属于某个特定的公司,那么这很容易。您没有错,不能跨多个文档查询子集合