C# Unity-将相同字段的多个数据存储到Firestore中的相同文档ID
如何向Firestore添加数据,而不过度写入同一密钥的先前数据?例如,我想在集合“分数”中添加一个名为“玩家1”的文档。我想记录玩家1的所有分数,无论同一玩家玩游戏的次数是多少。换句话说,如何将数据附加到Firestore文档中 这是我用来将数据写入Firestore的代码。如何确保每次为同一用户运行此代码时“数据”不会被过度写入?如果您能在以下方面提供帮助,我们将不胜感激:C# Unity-将相同字段的多个数据存储到Firestore中的相同文档ID,c#,firebase,unity3d,google-cloud-firestore,C#,Firebase,Unity3d,Google Cloud Firestore,如何向Firestore添加数据,而不过度写入同一密钥的先前数据?例如,我想在集合“分数”中添加一个名为“玩家1”的文档。我想记录玩家1的所有分数,无论同一玩家玩游戏的次数是多少。换句话说,如何将数据附加到Firestore文档中 这是我用来将数据写入Firestore的代码。如何确保每次为同一用户运行此代码时“数据”不会被过度写入?如果您能在以下方面提供帮助,我们将不胜感激: public void LogGameStats() { var data = new Dictionary
public void LogGameStats()
{
var data = new Dictionary<string, object>{
{"Number of Targets Collected", gameStats.targetCollectedCount},
{"Number of Walls Hit", gameStats.wallHitCount},
{"Number of Hazards Hit", gameStats.hazardHitCount},
};
StartCoroutine(WriteDoc(GetDocumentReference(), data));
Debug.Log("I logged something");
}
public void LogGameStats()
{
var数据=新字典{
{“收集的目标数”,gameStats.targetCollectedCount},
{“墙命中数”,gameStats.wallHitCount},
{“命中危险数”,gameStats.hazardHitCount},
};
start例程(WriteDoc(GetDocumentReference(),data));
Log(“我记录了一些东西”);
}
如果您使用相同的documentID,您可以使用两种方法来实现这一点,并且这两种方法都需要对Firestore结构进行一些重组:
Player Collection
playerId,
[
{
targetCollectedCount,
wallHitCount,
hazardHitCount
},
{...}
]
Player Collection
playerId,
Score Subcollection
scoreId,
targetCollectedCount,
wallHitCount,
hazardHitCount,
scoreTimestamp
这种方法的问题是,随着游戏的进行,你将不得不在该数组中创建许多记录,并且每次阅读此文档时都要获取所有记录,这可能会导致游戏性能不佳,而且每个文档的文档大小限制为1MB,这可能会很快被打破,因此,我不推荐这种方法,但它仍然是一种选择
Player Collection
playerId,
[
{
targetCollectedCount,
wallHitCount,
hazardHitCount
},
{...}
]
Player Collection
playerId,
Score Subcollection
scoreId,
targetCollectedCount,
wallHitCount,
hazardHitCount,
scoreTimestamp
使用这种方法,您可以更灵活地确定一次要获取多少分数,从而提高性能,而且在集合中可以存储的文档数量没有限制,因此您不必担心文档的大小
注意:我没有共享任何代码,因为我认为这更像是Firestore的一个结构问题,而不是编码问题,但是如果您在实现执行此任务的代码时遇到任何问题,请告诉我,我可以帮您解决。请附上您的firebase相关代码。您太棒了。非常感谢。我最后为不同类型的数据做了以上两种选择。@卡西克很高兴知道我的答案是有帮助的,请考虑投票和接受它,这样,如果社区里的其他人经历了你所面临的同样的问题,他们会知道我的答案是正确的,并且会更容易地引用它。此外,这将有助于提高您在堆栈溢出方面的声誉。:)