(); answer.pu-6ren">
gpt4 book ai didi

java - 如何向 Firestore 中已有的数组添加一个值,该数组已经具有这个确切的值,而不包含 "overwriting"?

转载 作者:行者123 更新时间:2023-12-01 18:35:08 25 4
gpt4 key购买 nike

在我的测验应用中,玩家以 Integer 形式输入他的第一个答案,这会在 Firestore 中创建一个数组,如下所示:

Map<String, Object> answer = new HashMap<>();
answer.put("answers", Arrays.asList(answerPlayer1Int));

answerRef.document("Round 1").collection(uidPlayer1).document(uidPlayer1)
.set(answer).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {

}
});

在下一个 fragment 中,他输入了第二个问题的第二个答案,我希望将该值添加到之前创建的数组中。目前,我使用下面的代码,当第一个答案和第二个答案不相同时,该代码有效,但当第一个答案等于第二个答案时,第二个答案不会像我希望的那样更新数组列表。

我知道原因是什么,但我现在想知道,是否可以向 Firestore 中的现有数组添加任何类型的值?

这是第二个答案的代码:

answerRef.document("Round 1").collection(uidPlayer1).document(uidPlayer1)
.update("answers", FieldValue.arrayUnion(answer2Player1Int)).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {

}
});

这是当玩家对每个问题使用相同答案时我当前得到的输出:

enter image description here

这就是我想要的输出:

enter image description here

再次感谢任何帮助!

最佳答案

如果您的数组中需要有多个甚至重复的元素,那么您应该读取文档,获取数组,更新它并将其写回。

您还可以使用 arrayUnion 运算符来解决此问题,但这一次它可以确保每个唯一值在数组中仅存在一次。使用 arrayUnion 时无法添加重复值。

另请注意,根据有关 array membership 的官方文档:

If the array has multiple instances of the value you query on, the document is included in the results only once.

关于java - 如何向 Firestore 中已有的数组添加一个值,该数组已经具有这个确切的值,而不包含 "overwriting"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60075566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com