Ios 将自定义对象添加到Firestore中的数组
我正在为客户制作一个订购应用程序,以订购他们的特定规格。当用户登录时,他们可以进入一个包含所有规格的tableview的选项卡,一旦他们点击一个单元格,它将带他们到一个新的视图控制器,该控制器将显示规格的更多信息。一旦在该视图控制器上,他们将能够添加该项目的x数量的托盘/卷/等。我可以将规范添加到Firestore,但我无法将其添加到Firestore中我需要的阵列中。我的目标是,在另一个选项卡上,用户可以查看他们试图订购的所有当前规格,直到他们点击提交。我目前正在使用user.uid访问Firestore内的特定客户订单 代码: @iAction func addPallet(\发送方:任何){ 规格代码: 结构规范:可编码{Ios 将自定义对象添加到Firestore中的数组,ios,swift,firebase,google-cloud-firestore,swift5,Ios,Swift,Firebase,Google Cloud Firestore,Swift5,我正在为客户制作一个订购应用程序,以订购他们的特定规格。当用户登录时,他们可以进入一个包含所有规格的tableview的选项卡,一旦他们点击一个单元格,它将带他们到一个新的视图控制器,该控制器将显示规格的更多信息。一旦在该视图控制器上,他们将能够添加该项目的x数量的托盘/卷/等。我可以将规范添加到Firestore,但我无法将其添加到Firestore中我需要的阵列中。我的目标是,在另一个选项卡上,用户可以查看他们试图订购的所有当前规格,直到他们点击提交。我目前正在使用user.uid访问Fir
// Properties
var specNumber: String
var specDescription: String
var palletCount: Int
var palletsOrdered = 0
enum CodingKeys: String, CodingKey {
case specNumber
case specDescription
case palletCount
case palletsOrdered
}
}
我需要添加一些东西,如下图所示。用户将添加x个托盘,然后转到他们想要的下一个规范,并将其添加到Firestore中的阵列中。好的,我想我得到了您想要做的。尝试: db.collection(“orders”).document(userID).setData([“allMyData”:myArray]) “allMyData”将是您要保存数组的字段的名称,myArray将是您的数组(specAdded)。这就是您要查找的 如果该文档已经存在,您将希望使用.updateData而不是.setData来保留该特定文档中可能已经存在的所有其他字段
亲切问候谢谢,它接近我所需要的。我将更新我的问题以显示我到底需要什么。您的数据库结构对我来说似乎有点奇怪,但这可能有其原因。也许您应该使用更深层的order.db.collection(“orders”).document(“userID”).collection(“specs”).document().setData(…)您也可以使用arrayUnion()或arrayRemove(),但为了充分利用firestore的功能,我建议改为使用文档和集合Hierachy。如果我的答案有帮助,请放弃或点击已解决的按钮。我愿意更改数据库的结构。我有两个集合(用户和订单)一个用于用户和他们的规格,另一个用于他们的订单,但在写了这篇文章之后,我可能应该在每个用户下面的用户中包含订单。我的最终游戏是每个用户都有自己的规格,可以向一个订单添加多个规格,所以每当他们添加一个带有x个托盘的规格时,它都会附加到Firestore内的阵列中。我可以也可能只是订购了规格和数量,而不是其他数据。通过查看您的屏幕截图,我觉得“规格”应该是一个集合,“0”和“1”将是该集合中的文档。如果您想坚持使用数组,可以通过ForementEnd数组运算符来实现。祝您好运,希望这会有所帮助。我最初是这样设置的,但无法正确获取数据并将其添加到我的自定义对象中。您必须处理spec字段(在数据库中)与数组类似。要将元素附加到Firestore中的数组,您必须抓取数组,将其解压缩,将元素添加到其中,并使用新数组更新文档,或者使用
arrayUnion
在不首先读取的情况下附加元素。Firestore中的数组的工作方式与您在iOS中使用的略有不同。例如,如果仅使用arrayUnion
,数组将永远不会包含重复项(从这个意义上讲,它的工作方式类似于集合而不是数组,这是非常有用的)。但是,如果您直接使用重复项编写数组(而不使用arrayUnion
),这些重复项将保留下来。请阅读以下初级读物:
// Properties
var specNumber: String
var specDescription: String
var palletCount: Int
var palletsOrdered = 0
enum CodingKeys: String, CodingKey {
case specNumber
case specDescription
case palletCount
case palletsOrdered
}