Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity-将相同字段的多个数据存储到Firestore中的相同文档ID_C#_Firebase_Unity3d_Google Cloud Firestore - Fatal编程技术网

C# Unity-将相同字段的多个数据存储到Firestore中的相同文档ID

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

如何向Firestore添加数据,而不过度写入同一密钥的先前数据?例如,我想在集合“分数”中添加一个名为“玩家1”的文档。我想记录玩家1的所有分数,无论同一玩家玩游戏的次数是多少。换句话说,如何将数据附加到Firestore文档中

这是我用来将数据写入Firestore的代码。如何确保每次为同一用户运行此代码时“数据”不会被过度写入?如果您能在以下方面提供帮助,我们将不胜感激:

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结构进行一些重组:

  • 使用分数数组:
  • 使用这种方法,每次用户获得新分数时,您都会将记录添加到分数数组中,并且最新的分数将是数组中的最后一条记录。为此,您必须具有以下Firestore结构:

    Player Collection
        playerId,
        [
            {
                targetCollectedCount,
                wallHitCount,
                hazardHitCount
            },
            {...}
        ]
    
    Player Collection
        playerId,
        Score Subcollection
            scoreId,
            targetCollectedCount,
            wallHitCount,
            hazardHitCount,
            scoreTimestamp
    
    这种方法的问题是,随着游戏的进行,你将不得不在该数组中创建许多记录,并且每次阅读此文档时都要获取所有记录,这可能会导致游戏性能不佳,而且每个文档的文档大小限制为1MB,这可能会很快被打破,因此,我不推荐这种方法,但它仍然是一种选择

  • 有一个分数子集合:
  • 使用这种方法,您可以在用户每次获得新分数时创建一个新的分数文档,您还可以添加时间戳,以便更轻松地获得最新分数。为此,您必须具有以下Firestore结构:

    Player Collection
        playerId,
        [
            {
                targetCollectedCount,
                wallHitCount,
                hazardHitCount
            },
            {...}
        ]
    
    Player Collection
        playerId,
        Score Subcollection
            scoreId,
            targetCollectedCount,
            wallHitCount,
            hazardHitCount,
            scoreTimestamp
    
    使用这种方法,您可以更灵活地确定一次要获取多少分数,从而提高性能,而且在集合中可以存储的文档数量没有限制,因此您不必担心文档的大小


    注意:我没有共享任何代码,因为我认为这更像是Firestore的一个结构问题,而不是编码问题,但是如果您在实现执行此任务的代码时遇到任何问题,请告诉我,我可以帮您解决。

    请附上您的firebase相关代码。您太棒了。非常感谢。我最后为不同类型的数据做了以上两种选择。@卡西克很高兴知道我的答案是有帮助的,请考虑投票和接受它,这样,如果社区里的其他人经历了你所面临的同样的问题,他们会知道我的答案是正确的,并且会更容易地引用它。此外,这将有助于提高您在堆栈溢出方面的声誉。:)