ios 在Swift中使用文档ID数组更新多个Firebase文档

jv4diomz  于 2023-01-14  发布在  iOS
关注(0)|答案(1)|浏览(117)

我有一个表示Firebase文档ID的字符串数组,如下所示:

var idArray = [“PuLDb90jgz3a5P8bLQoy”,  “PMKoZIp46umXQnUlA64a”,  “cVGbD3Wy4gWjZ9fZP7h1”]

此数组是动态的,由以前的getDocuments调用生成。其中最多可以包含15个ID字符串,因此不能对其进行硬编码。
在每个Firebase文档中,我都将一个名为menuPosition的Int字段设置为当前值。
我尝试做的是更新出现在idArray中的每个文档,并且只需从-1\f25 menuPosition-1字段值一次更新。
本应如此简单明了的事情却让我抓狂--有人知道一个简单的方法吗?显然,如果我把它放在一个for循环中,那么代码将运行太多次,我的menuPosition值将会是错误的。我只希望每个操作执行一次。
任何帮助都将不胜感激

rekjcdws

rekjcdws1#

只需在文档ID上运行一个循环,并在每次迭代中递减该字段。

var idArray = ["J2LovReBF0v8F4e0RSBU", "UcW8tsgld2ZuUo92xfP8", "oHTJ4iO1NWCK7x1aryne"]

for docId in idArray {
    Firestore.firestore().document("someCollection/\(docId)").updateData([
        "menuPosition": FieldValue.increment(Int64(-1))
    ])
}

如果您希望此操作是原子的,那么只需将其 Package 在批处理写入中即可。

var idArray = ["J2LovReBF0v8F4e0RSBU", "UcW8tsgld2ZuUo92xfP8", "oHTJ4iO1NWCK7x1aryne"]
let db = Firestore.firestore()
let batch = db.batch()

for docId in idArray {
    batch.updateData([
        "menuPosition": FieldValue.increment(Int64(-1))
    ], forDocument: db.document("someCollection/\(docId)"))
}
batch.commit()

相关问题