【问题标题】:Firestore: Query documents by property of objectFirestore:按对象的属性查询文档
【发布时间】:2018-04-02 14:26:40
【问题描述】:

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

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 => {
      })

【问题讨论】:

  • 你的建议不起作用吗?
  • 它没有。认为只适用于布尔值,而不适用于对象。
  • 您可以为个人联系人创建公司的子集合吗?
  • @JasonBerryman 我很确定您目前无法通过子集合进行查询。他们提到如果我们想做这样的事情,我们应该重组我们的数据。
  • 这取决于您需要从哪里查询。如果您知道某个联系人属于特定公司,那么这很容易。您是正确的,您不能跨多个文档查询子集合

标签: firebase google-cloud-firestore


【解决方案1】:

您可以将包含电子邮件地址的属性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 => {
      })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2015-08-08
    • 2019-01-09
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2018-07-06
    • 2019-06-23
    相关资源
    最近更新 更多