我在Firestore的集合中有一系列嵌套对象,这些对象具有UID的键。我想通过检查用户的UID是否为对象键(基本上是否存在)来查询与用户相关的所有文档。这是firestore中的模型:
这是我当前试图退回文件的方式:
getAllTenancyOffersByUserId() {
return this.afs.collection('collection_name', ref =>
ref.where(`application.members.${this._auth.currentUserId}`, '==', !null),
);
}
但是这什么也不返回。我了解我可以按状态查询,但是它会不断更新,因此会引起问题
答案 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)