javascript - 云FireStore : Retrieve 1 document with query

标签 javascript angular google-cloud-firestore

我正在尝试从集合中检索单个文档。我现在使用下面的代码返回一组项目,但我知道只有一个项目。所以它不是那么干净。

设置:

private db: AngularFirestore
private itemSubs: Subscription[] = [];
itemAd= new Subject<Item>();

fetchItemFromDatabase(itemId: string) {
    this.itemSubs.push(
      this.db.collection('items', id => id.where('itemId', '==', itemId)).valueChanges().subscribe((items: Item[]) => {
        this.itemAd.next(items);
      }));
  }

我尝试使用 this.db.collection('items').doc(itemId).get() 来执行此操作,但我在 get() 上收到错误,表明它不是发现/支持。当我尝试调用此方法(在官方云 Firestore 文档中找到的方法)时,我也没有获得自动完成功能。

我查看了一些其他解决方案,然后使用 this.db.collection('items').doc(itemId).ref.get().then(...) 进行了尝试 ,但这里我得到了一个空文档。

所以我现在有点卡住了,当我知道其中只有 1 个项目时,我不想使用整个集合逻辑。

最佳答案

可能有多个 itemId 等于给定值的文档。虽然您可能知道您的应用程序中只有一个,但数据库和 API 无法知道或强制执行这一点。因此,您运行的查询将始终返回可能包含多个文档的查询快照。

this.db.collection('items', id => id.where('itemId', '==', itemId))

如果您想强制只有一个文档具有给定的项目 ID,请考虑使用该项目 ID 作为文档名称,而不是将其存储为文档中的字段。

只能有一个具有给定名称的文档,因此这意味着 ID 保证是唯一的。然后您可以通过以下方式检索该文档:

this.db.collection('items').doc(itemId)

关于javascript - 云FireStore : Retrieve 1 document with query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49198903/

相关文章:

javascript - 图像固定,但消失在 div 后面

javascript - 迭代列表元素 - jQuery

firebase - 当我使用相同的现有数据执行操作时,Firestore 写入计数是否会增加?

android - 如何使 GEO Point Class Parcelable 或 Serializable 因为我想使用 Intent 传递它们

firebase - flutter 和 Firebase : Remove Item(Map) from Array in firebase

javascript - 有间隔的循环停止作用

javascript - 不使用 jQuery 从 jsp 获取图像 url 到 ajax

angular - 获取对组件中使用的指令的引用

angular - 如何使用具有相同名称的不同选择器?

棱 Angular Material |检查对话框是否打开