firebase 按对象键的Firestore查询

ufj5ltwl  于 2023-04-22  发布在  其他
关注(0)|答案(4)|浏览(122)

我在firestore的集合中有一系列嵌套对象,它们的键是UID。我想查询与用户相关的所有文档,通过检查它们的UID是否是对象键(基本上如果它存在)。这是firestore中的模型:

这是我目前正在尝试返回文档的方式:

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

但这没有返回任何东西。我知道我可以只按该状态查询,但它不断更新,所以会导致问题

blmhpbnm

blmhpbnm1#

下面的代码应该可以做到这一点:

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

pw9qyyiw

pw9qyyiw2#

实际上,你可以这样做,通过对象中的任何字符串字段进行过滤:

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

这里重要的部分是字符串字段“〉",”''”

gudnpqoy

gudnpqoy3#

我相信查询一个对象是否存在是不可能的。我认为你的查询对象内部字段的想法可能是最好的选择。
您可以尝试在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')
    ),
  );
}
uqdfh47h

uqdfh47h4#

你为什么不把id加到对象上呢

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

你的查询如下:.collection('members').where('memberId', "==", currentMemberId)

相关问题