从Firebase中的数组中删除特定的地图/对象

时间:2019-01-27 21:30:30

标签: firebase dart flutter google-cloud-firestore

我正在尝试在Firestore中使用数组和地图/对象。我想知道如何从数组中删除特定的地图。 我尝试过这样的事情:

await Firestore.instance.collection('users').document(interestedInID).get().then((val){
  return val.data['usersInterested'].removeWhere((item)=>
    item['userID'] == userID
  ); 
}).catchError((e){
  print(e);
});

但我在终端中收到此错误:

Unsupported operation: Cannot remove from a fixed-length list

我真的不明白这意味着什么。我做了一些谷歌搜索,固定长度的列表正是它所说的。这是一个具有固定长度的列表,不能更改,但是必须明确声明固定长度的列表。另一方面,无需声明可增长列表。 我尚未在Firestore中声明定长列表,但一直说我无法从中删除元素。我可以添加/推送元素,然后使用以下命令将其删除:

'key': FieldValue.arrayRemove([value])

但是我不知道如何根据特定条件删除元素。在这种情况下,为用户ID。

有什么建议吗? 非常感谢!

1 个答案:

答案 0 :(得分:0)

这可能是一种解决方法:

  1. 您使用key:Firebase中的值获取特定的Array
  2. 将其放入飞镖临时引用List
  3. 像以前一样从引用Map中删除特定的List
  4. 像这样更新Firebase中的数据:
// make a reference List
List<Map> _modifiedUsersInterested = List();

// ... (fetch your Array first from Firebase, put those items in the reference List)

// remove the right Map from the reference List
_modifiedUsersInterested.removeWhere((item) => {
    item['userID'] == userID
});

// set the reference List as your array in Firebase
await Firestore.instance
.collection('users')
.document(interestedInId)
.updateData(
    {'usersInterested': _modifiedUsersInterested}
);