Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore数据模型不一致_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript Firestore数据模型不一致

Javascript Firestore数据模型不一致,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我试图在firestore中保存一些数据,数据由事件组成,每个事件都有一个日期,每个事件都有一些与会者 我现在要做的是像这样建模events/${eventDate}/${userEmail},然后用用户的数据设置它。但是,当我试图设置此数据时,我得到一个错误,即段号应为偶数 当我在路径中添加另一段时(我不想这样做): events/${eventDate}/attenders/${userEmail}我可以设置数据,但无法检索数据(尝试检索给定事件日期的所有与会者) // insertion

我试图在firestore中保存一些数据,数据由事件组成,每个事件都有一个日期,每个事件都有一些与会者

我现在要做的是像这样建模
events/${eventDate}/${userEmail}
,然后用用户的数据设置它。但是,当我试图设置此数据时,我得到一个错误,即段号应为偶数

当我在路径中添加另一段时(我不想这样做):

events/${eventDate}/attenders/${userEmail}
我可以设置数据,但无法检索数据(尝试检索给定事件日期的所有与会者)

// insertion - this worked after some tweaking
this.db.collection('pickups').doc(pickupDate).set({ [email]: userData})


// deletion (this doesn't work - expects even number of segments)
this.db.collection('pickups').doc(`${pickupDate}/${email}`).delete()

// retrieval (works)
this.db.collection('pickups').doc(pickupDate).valueChanges()
当前删除:

 this.db.collection('pickups').doc(pickupDate).update({
        [email]: firestore.FieldValue.delete()
      })

我在这里遗漏了什么?这不应该像常规的JSON吗?

您当前尝试的路径
events/${eventDate}/${userEmail}
被解释为一个集合(事件),然后是一个文档(eventDate),然后是另一个文档(userEmail)

您实际拥有的是一个集合,该集合中的文档,该文档中的字段

看起来您添加的电子邮件是正确的(虽然我会删除单词email周围的括号),但尝试的删除方式不正确。您删除的字段如下:

var removeCapital = cityRef.update({
    capital: firebase.firestore.FieldValue.delete()
});
this.db.collection('pickups').doc(pickupDate).update({
     email: firebase.firestore.FieldValue.delete()
})
您可以在此处查看文档:

删除操作可能如下所示:

var removeCapital = cityRef.update({
    capital: firebase.firestore.FieldValue.delete()
});
this.db.collection('pickups').doc(pickupDate).update({
     email: firebase.firestore.FieldValue.delete()
})

听起来您试图做的是从文档中删除一个字段。但是,您有以下代码:

this.db.collection('pickups').doc(`${pickupDate}/${email}`).delete()
正在尝试生成对集合的引用,然后将其删除。使用
collection()
doc()
引用文档中的字段是不正确的。它们仅用于生成对文档和集合的引用

如果要删除文档中的字段,请首先生成对包含该字段的文档的引用:

const ref = this.db.collection('pickups').doc(pickupDate)
然后更新文档以表明您希望删除该字段:

ref.update({ [email]: firebase.firestore.FieldValue.delete() }}
在FieldValue之外引用的方式将根据SDK导入代码的方式而改变


有关更多信息,请参见。

请编辑问题,以显示未按预期方式运行的实际代码。还请显示用于构建路径的任何变量的准确值。如果数据库中已有内容,请将结构添加为屏幕截图。我添加了一些代码,但没有任何内容数据库现在。使用
FirebaseError:No document to update:projects/myproject/databases/(default)/documents/pickups/16-09-19}
您缺少实际的文档,例如需要一些东西才能更新它。您可以尝试.set()使用merge=True,它将尝试更新,如果不存在任何内容,它将添加文档。很抱歉,删除中有一个额外的括号。现在我没有收到错误,但什么都没有发生。这不起作用。我在
email
周围有括号,因为它是一个变量。也许这就是你的解决方案不起作用的原因。大概是,单词email Is不是一个通常人们希望通过一致键引用的变量。如果您将“电子邮件”一词设为变量,则无论何时您希望引用其中的数据,您都需要了解电子邮件。假设您希望将电子邮件存储在“电子邮件”下是否不正确键,而您想在动态电子邮件地址下存储一些数据?我基本上是想让这个
{pickups:{'10-9':{abc@gmail:{//用户数据},'11-09:..}
你能用最新的不起作用的代码更新你的问题吗,以及你收到的错误消息吗?请参阅Dan的回答和我在上面编辑的电子邮件周围的评论括号。这是用JavaScript语法替换变量作为属性名称。根据我在OP中的编辑,它不起作用。你的OP没有发生任何事情有语法错误。右括号太多。你可以在错误消息中看到。是的,我注意到并修复了这个问题,现在删除什么都不做