按对象键的Firestore查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按对象键的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),
    );
  }

但这没有任何回报。我知道我可以只查询该状态,但是它会不断更新,因此会导致问题

答案

以下应该做的伎俩:

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

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

另一答案

我相信无法查询对象是否存在。我认为你在对象中查询字段的想法可能是最好的选择。

您可以尝试查询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')
    ),
  );
}
另一答案

实际上,你可以做的是过滤你在对象中的任何字符串字段,如下所示:

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

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

以上是关于按对象键的Firestore查询的主要内容,如果未能解决你的问题,请参考以下文章

我如何获取 Firestore 数据库 iOS Swift 中对象键的值

更新firestore文档中嵌套对象中的字段?

Flutter:按时间戳查询 Firestore 文档

按日期范围查询 Firestore

Firestore:按文档数组中的项目查询

如何在 Firebase 云 Firestore 中查询一个字段然后按另一个字段排序?