Google cloud firestore Firestore限制数组字段项

Google cloud firestore Firestore限制数组字段项,google-cloud-firestore,Google Cloud Firestore,我是Firestore的新手,所以我可能错过了一些东西。我想要达到的是,说 我有这个:tableName/documentID/history数组 在这个历史数组中使用array Union从android应用程序存储了大量日志。现在,我希望这个历史数组只保留最后的100或N条目数。因此,如果出现新条目,最旧的数据将被删除 这在Firestore中可能吗?如果没有,是否有任何方法可以使用日常任务/工作/功能来实现这一点 我这样做是因为我想保持文档的大小限制。如果您有一个庞大的、不断增长的数据集,

我是Firestore的新手,所以我可能错过了一些东西。我想要达到的是,说

我有这个:tableName/documentID/history数组

在这个历史数组中使用array Union从android应用程序存储了大量日志。现在,我希望这个历史数组只保留最后的100N条目数。因此,如果出现新条目,最旧的数据将被删除

这在Firestore中可能吗?如果没有,是否有任何方法可以使用日常任务/工作/功能来实现这一点


我这样做是因为我想保持文档的大小限制。

如果您有一个庞大的、不断增长的数据集,那么使用数组类型字段并不是存储它的最佳方式。对于集合中的每个项目,最好在子集合中使用具有新文档的子集合。这将更容易查询和修改


但是,如果您必须使用数组,Firestore不会提供任何方法来按照您所描述的方式管理数组的内容。为了更改数组的内容(不使用arrayUnion或arrayRemove),您必须编写一些代码来读取文档,迭代列表字段值,在内存中将它们更改为您想要的值,然后将数组更新回文档。

如果您有大量不断增长的数据,使用数组类型字段并不是存储它的最佳方式。对于集合中的每个项目,最好在子集合中使用具有新文档的子集合。这将更容易查询和修改



但是,如果您必须使用数组,Firestore不会提供任何方法来按照您所描述的方式管理数组的内容。为了更改数组的内容(不使用arrayUnion或arrayRemove),您必须编写一些代码来读取文档,迭代列表字段值,在内存中将它们更改为您想要的值,然后将数组更新回文档。

您可以通过fs上的新数据触发云函数。创建读取上一个历史记录数组的事务。验证此数组的大小,如果大于100,则执行array.shift()和array.push(newData)。我认为,与读取收藏的所有项目相比,它是便宜的。

您可以通过fs上的新数据创建一个云函数。创建读取上一个历史记录数组的事务。验证此数组的大小,如果大于100,则执行array.shift()和array.push(newData)。我认为与阅读该系列的所有项目相比,它是便宜的。

向我们展示您已经尝试过的内容。您可以使用云功能来实现这一点。每次写入文档时,您都可以检查数组的大小,然后将最后一个数组降到N,然后再次写入。要么这样做,要么首先使用云函数对其进行写入,并在写入之前对数组进行修剪。@Fogmeister,你能给我一些有用的资源来做这件事吗?因为,我的数据库中有大量数据,所以正确操作非常重要。@AlexMamo,正如我所提到的,我是Firestore的新手,无法找到正确的方法。由于我的数据库中有大量数据,因此正确操作非常重要。@warrior3hs您目前的项目中是否有云函数?向我们展示您已经尝试过的功能。您可以使用云函数来完成此操作。每次写入文档时,您都可以检查数组的大小,然后将最后一个数组降到N,然后再次写入。要么这样做,要么首先使用云函数对其进行写入,并在写入之前对数组进行修剪。@Fogmeister,你能给我一些有用的资源来做这件事吗?因为,我的数据库中有大量数据,所以正确操作非常重要。@AlexMamo,正如我所提到的,我是Firestore的新手,无法找到正确的方法。由于我的数据库中有大量数据,因此正确处理这些数据非常重要。@warrior3hsan您目前的项目中有云功能吗?是的,我理解。问题在于,它已经是一个拥有大量数据的实时项目。我现在不知道该怎么办。此外,始终存在数据丢失或破坏某些功能的问题。正如我所说,您必须编写一些代码来管理该数组的内容,或者在客户端添加新数据之前,或者在使用一个CAN函数触发器或一些其他的后端控件添加数据之后,周期性地运行。如果您的数据库已经是活的,那么您也应该考虑创建一个开发环境,测试新的变化,比如在将其投入生产之前的新变化,因为每个变化都有产生问题的风险。我明白。问题在于,它已经是一个拥有大量数据的实时项目。我现在不知道该怎么办。此外,始终存在数据丢失或破坏某些功能的问题。正如我所说,您必须编写一些代码来管理该数组的内容,或者在客户端添加新数据之前,或者在使用一个CAN函数触发器或一些其他的后端控件添加数据之后,周期性地运行。如果您的数据库已经是活的,那么您也应该考虑创建一个开发环境,测试新的变化,比如在将其投入生产之前的新变化,因为每一个变化都有产生问题的风险。