如何从Firebase获取多个ID?

时间:2019-12-27 14:53:11

标签: javascript firebase vue.js firebase-realtime-database

我有一个管理区域,该区域从Firebase收集阵列中的所有数据。我的任务是更新数据并将其发送给特定用户的Firebase(我需要发表一些评论)。问题是在.doc('id of document')中,我不知道如何获取Firebase中文档的特定ID。如果我输入了特定文档的ID(例如"2jzm4AcWTVNIlT9ESH7V"),则函数可以正常工作。 doc.data()从Firebase返回所有数据,每个ID与数据一起存储在对象中。

<script>
import moment from 'moment'
export default{
  // ...
  mounted(){
    db.collection("form").where("posted_at", ">=", 1)
      .get()
      .then(querySnapshot => {
        querySnapshot.forEach(doc=> {
          console.log(doc.id, " => ", doc.data());
          this.array.push(Object.assign({}, doc.data(), {id: doc.id}));
        });
      })
      .catch(function(error) {
        console.log("Error getting documents: ", error);
      });
  },
  methods:{
    comment(){
      let id=this.array.id;
      db.collection("form")
        .doc(id)
        .update({
          comment: this.comment1 //data(){return{comment1:''}}
        })
        .then(function() {
          console.log("Document successfully written!");
        })
        .catch(function(error) {
          console.error("Error writing document: ", error);
        });
    }
  }
};
</script>

P.S。我收到此错误的函数:

FirebaseError: [code=invalid-argument]: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: undefined

1 个答案:

答案 0 :(得分:1)

let id=this.array.id;行试图获取数组本身的id属性,而不是数组中条目的ID。

基于您遵循的YouTube tutorial,当在comment()循环中附加v-for方法时,应将与其相关的数组条目作为参数传递。调用此方法时,应设置要编辑的ID,加载现有注释(如果存在)并打开模式对话框以编辑注释。

<script>
export default{
  //...
  methods: {
    editComment(userDetails) {
      this.textComment = userDetails.comment || ''; // load current comment
      this.activeUserDetailsId = userDetails.id; // set ID being edited
      $('#commentModal').modal('show'); // show modal dialog
    },
    saveComment() {
      let id = this.activeUserDetailsId;
      if (!id) {
        alert('Failed to save comment - invalid state');
        return;
      }
      db.collection("form")
        .doc(this.activeUserDetailsId)
        .update({
          comment: this.textComment
        })
        .then(function() {
          $('#commentModal').modal('hide');
          console.log("Document successfully written!");
        })
        .catch(function(error) {
          // TODO: Show error to user
          console.error("Error writing document: ", error);
        });
    }
  }
};

我已经将code you provided编辑,打样并重新制作为this updated file。它是徒手编写的,所以让我知道是否有任何错误。

更改摘要:

  • 重命名变量以使其用途明确
  • 添加了editComment(userDetails)saveComment()事件处理程序
  • 固定使用your other question中的formatTime过滤器
  • 添加了无结果的基本处理方法
  • 固定缩进
  • 修正了模态div的不正确放置-不应该放在v-for循环内