【问题标题】:Angularfire2 firestore - document "string slash" notationAngularfire2 firestore - 文档“字符串斜线”表示法
【发布时间】:2018-03-31 22:16:12
【问题描述】:

关于使用这种“字符串斜线”表示法引用文档的信息有点稀疏。这是the docs中提供的示例:

constructor(private afs: AngularFirestore) {
    this.userDoc = afs.doc<Item>('user/david');
    ...
}

我可以看出它正在引用 user 集合并获取具有唯一 ID david 的文档。但是如何确定 firestore 在该字符串斜杠表示法中查找的唯一索引(在本例中为 david)的字段?

【问题讨论】:

    标签: angular firebase angularfire2


    【解决方案1】:

    大卫在这里!

    1 + 2) 将david 视为users 集合中的主键。

    3) 当您可以使用生成的 ID 时,ID 并不重要,您可以通过查询取回文档。

    constructor(private afs: AngularFirestore): {
      const shirtsCollection = afs.collection<Item>('tshirts', ref => {
        return ref.where('price', '==', 10.00);
      });
      this.shirtsUnder10$ = shirtsCollection.valueChanges();
    }
    

    在一些不太常见的情况下,您还可以创建一个查找集合。您有一个已知的 id,其中包含生成的 id 列表。这对于像“活动参与者”这样的情况很有用。如果您知道活动的 ID,则可以返回参加该活动的用户的参加者 ID 列表。

    【讨论】:

    • 谢谢大卫!但是您并没有真正回答前两个问题 - 哪个字段是 david 以及它是如何指定为要在字符串斜线 getter 中使用的字段?
    • 当我尝试通过'someCollection/arbitraryField' 查询时,它不起作用。您是如何通过任意字段查找文档的?这确实是我问题的核心。谢谢!
    • 对不起,我没有把我的问题说得很清楚。我想到了。试图为遇到它的人澄清一下。
    【解决方案2】:

    当您以这种方式使用doc()set() 时,我没有意识到ID 是隐式设置的。在这种情况下,david 作为 id 提供:

    this.afs.doc(`user/david`).set(userObject);
    

    所以一旦你像这样添加它,它就可以通过你设置的ID来调用。调用该方法将替换(或“破坏性设置”,如文档所述)存储在该 ID 下的内容。

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2018-04-27
      • 2018-08-22
      • 2019-03-09
      • 2015-09-26
      • 2017-12-22
      相关资源
      最近更新 更多