【问题标题】:Firestore query using an object element as parameter使用对象元素作为参数的 Firestore 查询
【发布时间】:2018-04-20 11:11:17
【问题描述】:

我在一个项目中使用 Firestore 作为我的数据库,并且我有一个表,我需要在对象内部进行查询

{
   foo: "data",
   bar: "data",
   exObject: {
      dataToQuery: "value"
   }
}

这是我想在对象内部进行查询的结构示例 如下所示的查询:

dbRef.collection("Table").where("exObject.dataToQuery", "==", "value")

但这不起作用。

有没有办法在 Firestore 中使用对象的内部值作为参数进行查询? 如果没有,有没有办法达到同样的效果?

Firestore 结构示例

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:
    dbRef.collection("Table").where("exObject.dataToQuery", "==", "value")
    

    我第一次发布的这个语法确实是很好的语法,并最终开始工作。我将我的问题的原因归类为一个错字,我必须纠正尝试很多不同的事情

    【讨论】:

    • 我意识到这已经一岁了,但我在 firestore 上使用相同的 .where 方法。我只是不知道如何访问返回的数据。返回的对象在 QuerySnapshot 下显示了正确的 id,但我没有看到实际的对象本身。你是如何访问它返回的对象的?
    • let theResults = dbRef.collection("Table").where("exObject.dataToQuery", "==", "value")
    【解决方案2】:

    这是答案:

    .where(new firestore.FieldPath('exObject' , 'dataToQuery'), '==', "value"))
    

    更多信息Here

    【讨论】:

    • 这里不是 OP,但谢谢你分享这个。我认为 FieldPath 很有用,但未被充分利用。
    【解决方案3】:

    试试(从'Table'变成'TEST')

    xptoCollection : AngularFirestoreCollection<any>;
    
      constructor(private afs: AngularFirestore) { }
    
          this.xptoCollection = this.afs.collection('TEST', ref => {
            return ref.where('exObject.{dataToQuery}', '==', 'value');
          });
    

    【讨论】:

    • 似乎没有成功,查询仍然返回 0 结果
    【解决方案4】:

    由于某种原因工作, 您需要在 object_name 和 .property_name 之间留出空格

    'exObject .dataToQuery'
    

    而不是

     'exObject.dataToQuery'
    

    留出空间,它对我有用

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 1970-01-01
      • 2020-03-26
      • 2017-03-14
      • 1970-01-01
      • 2020-05-03
      • 2021-07-30
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多