【问题标题】:Firestore AngularFire2 5.0 - id'sFirestore AngularFire2 5.0 - id
【发布时间】:2018-02-13 18:44:32
【问题描述】:

为什么获取存储在 Firestore 中的数据的 id 与您可以直接访问 $key 的先前版本相比如此复杂?我在下面的代码中以错误的方式解决这个问题吗?在 Post 模型中,我必须有一个可以为空的字符串 id 字段来直接存储它。

getCollection$(): Observable<Post[]> {
  return this.afs.collection<Post>()
    .snapshotChanges().map(actions => {
      return actions.map(a => {
        const data = a.payload.doc.data() as Post;
        const id = a.payload.doc.id;
        return { id, ...data };
      });
    });
}

另外,有没有办法返回通过 add 方法添加的新文档的 id?

this.afs.collection<Post>(this.path).add(data);

【问题讨论】:

    标签: firebase google-cloud-firestore angularfire2


    【解决方案1】:

    Angularfire2 库的作者是这样决定的 :),第一次看起来很复杂,但当你习惯它时就没有问题了。

    您可以使用? 定义一个可选参数,该参数将在typescript 中有效使用,请检查此link。当您只关心id 时,这将很容易,这里您只有一个可选参数。

    但是当您需要来自.snapshotChanges() 的更多元数据时,例如type:'added|removed|modified'fromCachenewIndexoldIndex,按照官方doc 中的描述扩展您当前的模型会很方便。

    export interface PostId extends Post { id: string; }
    
    getCollection$(): Observable<PostId[]> {
      return this.afs.collection<Post>()
        .snapshotChanges().map(actions => {
          return actions.map(a => {
            const data = a.payload.doc.data() as Post;
            const id = a.payload.doc.id;
            return { id, ...data };
          });
        });
    }
    

    但请记住,无论您在何处获得此功能,都需要使用 id 扩展模型。

    最后一个问题

    //generate an id from firestore
    let tempId = this.afs.createId();
    this.afs.collection<Post>(this.path).doc(tempId).set(data);
    

    【讨论】:

    • 关于ID,我不想生成ID然后设置它。我正在寻找一种方法来返回新生成的 ID。
    • 当你用.createId()生成一个id时,当你用add生成一个id时也是一样的
    • 不正确 - 使用 createId 您明确告诉 Firebase 存储文档的 ID。如果您省略 .doc(tempId) 将自动生成的 id 与此处创建的不同
    • 是的,因为 firestore 每次都会为 createId()add 生成随机 ID,您需要执行任何一种方法
    • 想通了...当像这样使用时返回 id: this.postsCollection.add(data) .then(docRef => docRef.id) .catch(err => console.log(错误));
    猜你喜欢
    • 2019-01-16
    • 2018-06-27
    • 2018-12-29
    • 1970-01-01
    • 2018-03-19
    • 2018-03-21
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多