Javascript Firestore数据模型不一致
我试图在firestore中保存一些数据,数据由事件组成,每个事件都有一个日期,每个事件都有一些与会者 我现在要做的是像这样建模Javascript Firestore数据模型不一致,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我试图在firestore中保存一些数据,数据由事件组成,每个事件都有一个日期,每个事件都有一些与会者 我现在要做的是像这样建模events/${eventDate}/${userEmail},然后用用户的数据设置它。但是,当我试图设置此数据时,我得到一个错误,即段号应为偶数 当我在路径中添加另一段时(我不想这样做): events/${eventDate}/attenders/${userEmail}我可以设置数据,但无法检索数据(尝试检索给定事件日期的所有与会者) // insertion
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没有发生任何事情有语法错误。右括号太多。你可以在错误消息中看到。是的,我注意到并修复了这个问题,现在删除什么都不做