【问题标题】:Deleting a Firestore entry based on FIFO基于 FIFO 删除 Firestore 条目
【发布时间】:2021-06-22 01:06:43
【问题描述】:

我正在尝试创建一个脚本,该脚本使用 FIFO(先进先出方法)从 Firestore 集合中删除记录。

因此,如果集合中有三个匹配结果,则脚本应采用添加的第一个并删除那个(留下剩余的两个)。我的代码是:

_firestore
                                      .collection('myCollection')
                                      .where('uid',
                                          isEqualTo: _auth.currentUser.uid)
                                      .where('field',
                                          isEqualTo: widget.field)
                                      .orderBy('Posted', descending: false)
                                      .limit(1)
                                      .get()
                                      .then((querySnapshot) {
                                    querySnapshot.docs
                                        .forEach((documentSnapshot) {
                                      _firestore
                                          .collection('myCollection')
                                          .doc(documentSnapshot.id)
                                          .delete();
                                    });
                                  });

请注意:“已发布”是添加条目的日期)不幸的是,这不起作用,所有三个结果都保留在集合中。

如果我改用这个脚本,那么所有三个结果都会从集合中删除:

_firestore
                                          .collection('myCollection')
                                          .where('uid',
                                              isEqualTo: _auth.currentUser.uid)
                                          .where('field',
                                              isEqualTo: widget.field)
                                          .get()
                                          .then((querySnapshot) {
                                        querySnapshot.docs
                                            .forEach((documentSnapshot) {
                                          _firestore
                                              .collection('myCollection')
                                              .doc(documentSnapshot.id)
                                              .delete();
                                        });
                                      });

我的收藏中的一个条目示例如下:

所以我知道逻辑、连接、字段等...都是正确的,但为什么第一个示例不起作用?

【问题讨论】:

  • 我复制了这个,但是在创建了所需的索引之后,我做你想做的事情没有问题。你确定它们是完全建成的吗?

标签: flutter google-cloud-firestore collections snapshot


【解决方案1】:

你检查过你的日志吗?我很确定 Firebase 会抛出一个错误,指出您的集合需要带有链接的索引。 只需按照链接和说明构建索引。完成后,您应该能够做您正在寻找的事情。

关于索引的更多信息:https://firebase.google.com/docs/firestore/query-data/indexing

和简单查询/复合查询:https://firebase.google.com/docs/firestore/query-data/queries

【讨论】:

  • 感谢您的回复。看起来好像创建了单字段索引(并允许升序和降序搜索)。我确实也为相关字段添加了一个综合索引。它已经建成 - 但它仍然无法正常工作?
  • 输出中什么都没有?您是否还尝试打印查询快照的结果以确保它不为空?
  • 没有输出。它不能为空,因为第二个示例代码确实删除了所有匹配的条目(因此它正在查找它们)。如果我按字段排序并将结果限制为一个条目,它似乎找不到一个(?)
猜你喜欢
  • 2020-08-12
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2016-10-02
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多