【问题标题】:Why is my Firestore document wrapped inside a MAP object?为什么我的 Firestore 文档包含在 MAP 对象中?
【发布时间】:2019-07-14 13:44:26
【问题描述】:

将我的事件推送到 Firestore 后,我在事件 ID 中的数据被包装在另一个事件中(据说是 map() 对象)。为什么会这样?访问事件时,我必须执行“event.event.eventProperty”才能访问我的信息。第二个事件是在我的数据库中定义的,但不在我的代码中,因此会导致“事件属性不存在于事件”的错误。

我试图回溯整个事件创建过程,看看我是否不小心把我的事件推错了。到目前为止,我还没有找到具体的问题。我尝试在代码的各个部分使用 console.log(event) 并生成正确的对象,但是在推送它时,firebase 将数据嵌套在另一个事件对象中。 ''' 事件接口

    export interface Event {

  event_title?: String, 
  event_location?: String,  
  event_students?: String, 
  event_category?: String, 
  event_date?: String, 

  event_startTime?: String, 
  event_endTime?: String, 
  event_description?: String, 
  event_pictureURL?: String, 
  event_chatNumber?: Number, 
  event_goingCounter?: Number, 
  event_maybeGoingCounter?: Number, 
  event_creation_timeStamp?: Date ,
  event_id?: Number, 
  createdBy?: String,
  lastUpdate?: Number
}

''Firebase-database-service'

createEvent(event: Event) {
   this.eventCollectionRef.add({

   event

  })
    .then(function() {
    console.log("Event was successfully created!");
})
    .catch(function(error) {
    console.log("Error Creating Event: ", error);
});

}

'tab3(事件创建画面)'

createEvent() {
    this.event = {  
    event_title: this.createEventForm.controls["event_title"].value,
    event_location: this.createEventForm.controls["event_location"].value,  
    event_students: this.createEventForm.controls["event_students"].value, 
    event_category: this.createEventForm.controls["event_category"].value, 
    event_date: this.createEventForm.controls["event_date"].value, 
    event_startTime: this.createEventForm.controls["event_startTime"].value, 
    event_endTime: this.createEventForm.controls["event_endTime"].value, 
    event_creation_timeStamp: this.createEventForm.controls["event_creation_timeStamp"].value,
    event_description: this.createEventForm.controls["event_description"].value,
    event_pictureURL: "", 
    event_chatNumber: 0, 
    event_goingCounter: 0, 
    event_maybeGoingCounter: 0,
    createdBy: this.user.uid

  }
    this.FirebaseDatabase.createEvent(this.event)
    this.showToast("Event has been created.");
  }

''这是我从 firestore 检索具有特定 id 的事件的地方'

ngOnInit() {
    event: Event;

    this.firebaseDatabase.getEvent(this.id).subscribe( res => {
      this.event = res
      console.log(this.event["event"].event_category)
    })

  }

''GetEvent(id: string) 定义'

getEvent(id:string) {

return this.eventsCollection.doc<Event>(id).valueChanges().pipe(take(1), map(event => {

    return event

}))

}

错误信息

Error Message on Console

预期:将我的事件对象按原样推送到 Firestore。不要嵌套它。

实际:事件对象嵌套在地图中。

【问题讨论】:

    标签: javascript typescript firebase google-cloud-firestore


    【解决方案1】:

    这是因为您调用add(...) 的方式。现在你有:

    this.eventCollectionRef.add({
       event
    })
    

    这是以下的简写语法:

    this.eventCollectionRef.add({
       event: event
    })
    

    这就是为什么您会在数据库中看到一个额外的event 属性级别。如果您不希望这样,请删除 {}:

    this.eventCollectionRef.add(event)
    

    【讨论】:

      猜你喜欢
      • 2018-07-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2020-06-26
      相关资源
      最近更新 更多