Flutter Web 从 Cloud Firestore 中的文档更新值

Flutter Web updating a Value from a Document in Cloud Firestore

我有一个包含歌曲列表的 Cloud Firestore 数据库

我想更新文档喜欢,当用户添加具有相同歌曲标题的歌曲时 我尝试了更新方法,但它并没有真正起作用,值没有得到更新。我想我真的无法访问文档,也许我在 Cloud Firestore 中的结构是错误的。

void _saveLike(Song item) async {
    FirebaseFirestore.instance
        .doc('Songs/${item.title}')
        .update({'likes': item.likes}).then((likes) => print('Song updated'));
  }

这是我更新值的方法

 void checkSong(Song item) {
    bool isSongFound = false;
    list.forEach((s) {
      if (s.title.trim() == item.title.trim()) {
        setState(() {
          s.likes++;
        });
        _saveLike(item);
        
        isSongFound = true;
      }
    });
    if (!isSongFound) {
      addSong(Song(title: textfieldControllersong.text, like: false, likes: 0));
    }
  }

这是我检查歌曲是否已经存在的方法。

是否有更好的方法来使用 Cloud Firebase 或其他数据库服务构建列表?

当您访问这样的文档时:

FirebaseFirestore.instance
    .doc('Songs/${item.title}')

数据库在 Songs 集合中查找名为 item.title 的文档,但不存在具有该 ID 的文档。

要根据字段值更新文档,您首先需要run a query找到文档,然后然后运行更新。

类似于:

FirebaseFirestore.instance
  .collection('Songs')
  .where('title', isEqualTo: item.title)
  .get()
  .then((snapshot) {
    snapshot.docs.forEach((doc) {
      doc.reference.update({'likes': item.likes})
    });
  });