通过对象密钥进行Firestore查询

时间:2019-01-30 11:23:14

标签: javascript angular firebase google-cloud-firestore

我在Firestore的集合中有一系列嵌套对象,这些对象具有UID的键。我想通过检查用户的UID是否为对象键(基本上是否存在)来查询与用户相关的所有文档。这是firestore中的模型: enter image description here

这是我当前试图退回文件的方式:

  getAllTenancyOffersByUserId() {
    return this.afs.collection('collection_name', ref =>
      ref.where(`application.members.${this._auth.currentUserId}`, '==', !null),
    );
  }

但是这什么也不返回。我了解我可以按状态查询,但是它会不断更新,因此会引起问题

4 个答案:

答案 0 :(得分:1)

以下应该可以解决问题:

  getAllTenancyOffersByUserId() {
    return this.afs.collection('members', ref =>
      ref.where(firebase.firestore.FieldPath.documentId(), '==', `${this._auth.currentUserId}`)
    );
  }

请参阅相应的文档:https://firebase.google.com/docs/reference/js/firebase.firestore.FieldPath#.documentId

答案 1 :(得分:1)

我认为无法查询对象是否存在。我认为,查询对象内部字段的想法可能是最好的选择。

您可以尝试在date_modified字段中查询大于1900的内容。

getAllTenancyOffersByUserId() {
  return this.afs.collection('collection_name', ref =>
    ref.where(`
      application.members.${this._auth.currentUserId}.date_modified`, 
      '>=',
      new Date('1900-01-01')
    ),
  );
}

答案 2 :(得分:0)

实际上,您可以按照这样的对象中的任何字符串字段进行过滤:

.collection("collectionName")
.where("mapArray.map.stringField", ">", "''")

这里的重要部分是字符串字段; “>”,“”“

答案 3 :(得分:0)

为什么不将 id 添加到对象中?例如

    members: {
      currentMemberId: {
      date_modified:"",
      deposit_type:"",
      status:"pending",
      memberId: "currentMembderId" 
     }
    }

并且您按以下方式进行查询:.collection('members').where('memberId', "==", currentMemberId)