我正在尝试循环浏览一个列表,将每个项目添加到google firestore文档中。然而,我面临的问题是,只有列表中的最后一项被添加到文档中。
注意:行打印(“=====$i POST成功添加==”)按预期增量打印5次
问题:如何使此循环将所有项目添加到firestore文档?
void addPost() {
DocumentReference documentReferencer = _firestore.collection('posts').doc();
var i = 0;
while (i < 5) {
documentReferencer.set(postsData[i]);
print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
i++;
}
}
事实上,所有项目都写入文档,但您不断覆盖文档,下一个项目最终只有最后一个项目。
调用set()
时,您应该使用SetOptions
将合并
设置为true
就像这样。
void addPost() {
DocumentReference documentReferencer = _firestore.collection('posts').doc();
var i = 0;
while (i < 5) {
documentReferencer.set(postsData[i], SetOptions(merge: true));
print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
i++;
}
}
或者使用更新()。注意:如果文档尚不存在,则此操作将失败。
void addPost() {
DocumentReference documentReferencer = _firestore.collection('posts').doc();
var i = 0;
while (i < 5) {
documentReferencer.update(postsData[i]);
print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
i++;
}
}
我建议您在关注数据库的同时,逐步调试代码。然后您可以看到您是如何不断覆盖文档的。
还要注意,如果数据库调用出错,您不会捕获任何错误。因此您无法判断操作是否成功。在您的print()
中,您唯一知道的是请求已发送到Firebase。
进一步阅读:
我不知道您的问题出在这里,但您的代码似乎忽略了一个事实,即将数据发布到服务器是一种异步操作。
换句话说,我希望您需要等待这种情况发生。
此外,我还要重构循环以提高可读性。
您的代码应该是这样的:
Future<void> addPost() async {
DocumentReference documentReferencer = _firestore.collection('posts').doc();
for(final post in postsData) {
await documentReferencer.set(post);
print("=== $i POST SUCCESSFULLY ADDED ===="); //PRINTS 5 TIMES
}
}
问题内容: 在我当前的项目中,我尝试将一个添加到PDFBox文档中。更具体地说,我使用来自的图片。我的代码如下所示: 文档被创建;我可以添加文本,但是出现错误,指出图像没有足够的信息可显示。 任何有关我做错事情的线索? 问题答案: 感谢您帮助我解决垃圾问题。昨晚和今天花了几个小时,人们对PipedIn / OutStreams感到困惑。无法解决。但是,我得到它的工作。事实证明,这并不是很困难。 我
我正在使用Python FastAPI编写一些Rest API。需要在Swagger-OpenAPI文档中添加许多自定义部分。这包括每个API的联系信息字段、作者信息、显示数据模型的图像、数据库字段等。 有没有办法使用快速API内置的OpenAPI功能来完成所有这些工作?我知道可以托管我们自己的自定义 json 文件。但是我不知道如何将图像添加到招摇的json文件中。我也不知道如何将自定义字段添加
我有一个JPanel、窗口和一组JPanel和JLabel。我想在JFrame中添加5个JPanel,在每个JPanel中添加一个JLabel。每个JPanel将用于表示有关骰子的数据。 但是,当我运行代码时,只有最后一个JPanel出现在JFrame上,并带有文本“Dice 4”。我不明白为什么。 守则:
问题内容: 我已经从http://www.oracle.com/technetwork/java/javase/downloads/index.html#docs下载了Java API文档,并且应该使用 窗口->首选项-> Java->已安装的JRE->编辑->“选择rt.jar”-> Javadoc位置 并且该位置已被接受,“验证”就可以了。但是,对我来说,当我将鼠标悬停在某个项目上时(例如在A
问题内容: 我在这里想到了这个循环: 它有效,但是我敢肯定有更好的方法 问题答案: 答案将取决于您使用的是哪种类型,例如,如果您使用的是a ,则可以使用类似… 假设您只想向表模型的末尾添加行;) 就个人而言,我希望将每个成员作为单个实体添加到表模型中,但这仅仅是我一个 看看如何使用表格了解更多详细信息…