我正在为一个项目使用 flutter web 和 firebase,但遇到了一个问题。我正在尝试更新 firestore 数组中的地图。
使用这个:
var val = [];
val.add({'groupUID': groupUID, 'inviteStatus': status});
var userInviteUID;
await users
.document(uid)
.get()
.then((value) => userInviteUID = value.data['inviteUID']);
await invites
.document(userInviteUID)
.updateData({'invites': FieldValue.arrayUnion(val)});
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果: firestore结构
我想要做的只是将地图中的 1 更改为 2。我认为它会更新,因为它的值相同,但它只是将它添加到数组中。
我环顾堆栈,看到了一些方法,例如复制整个数组并在需要的地方更改它,然后将其添加回来。
但我想知道是否有办法通过对我的代码添加一些修改来避免这种情况。也让我知道是否有更好的结构我应该使用。感谢帮助!
更新:
var ref = invites.document(userData.inviteUID);
ref.get().then((value) async {
var invitesList = value.data['invites'];
switch (status) {
case 1:
break;
case 2:
var index;
invitesList.asMap().forEach((key, value) {
if (value['groupUID'] == groupUID) index = key;
});
invitesList.removeAt(index);
await invites
.document(userData.inviteUID)
.updateData({'invites': FieldValue.arrayUnion(invitesList)});
break; …Run Code Online (Sandbox Code Playgroud)