Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Firebase 按uid计算唯一post视图_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 按uid计算唯一post视图

Firebase 按uid计算唯一post视图,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我正在尝试使用NoSQL Cloud Firestore构建一个具有新闻公告功能的移动应用程序。我试图通过将用户的uid保存在一个名为“views”的数组中来获得唯一的post视图,并通过获取数组的长度来计算它。这是值得推荐的还是有其他更好的解决方案?多谢各位 目前,这是我的数据库的结构: 新闻(精选) -DummyNews1(文件) -新闻标题 -后胸骨 -正文信息 -时间创造 -视图(阵列) -dummyuid1 -dummyuid2我喜欢您的解决方案,因为它易于实现。实际上,您不必手动检查

我正在尝试使用NoSQL Cloud Firestore构建一个具有新闻公告功能的移动应用程序。我试图通过将用户的uid保存在一个名为“views”的数组中来获得唯一的post视图,并通过获取数组的长度来计算它。这是值得推荐的还是有其他更好的解决方案?多谢各位

目前,这是我的数据库的结构:

新闻(精选)

-DummyNews1(文件)

-新闻标题

-后胸骨

-正文信息

-时间创造

-视图(阵列)

-dummyuid1


-dummyuid2

我喜欢您的解决方案,因为它易于实现。实际上,您不必手动检查重复的UID,因为firestore有一个内置功能可以为您执行此操作

以下是一个例子:

FirebaseFirestore.instance.collection('news').doc('documentId').update({
  'views': FieldValue.arrayUnion([viewerUid]),
});
FieldValue.arrayUnion
将检查数据库中是否存在内容,只有在不存在时才会添加内容

现在,虽然我是你的解决方案的粉丝,并且我确实在我自己发布的应用程序中使用了类似于的功能类型的方法,但是如果你的应用程序变得超级流行,你应该注意一些限制

firestore中的最大文档大小为1Mb。由于firebase auth的uid长度为28个字符,因此忽略其他字段,文档中最多可存储37400个视图


但如果这是一个新的应用程序,我不会太担心这个限制。此外,一旦接近这个极限,您应该有足够的资源转向另一种可扩展的方法。

我有一个问题。如果同一用户来查看同一新闻两次,您希望查看计数为2,还是应该为1,因为它是同一用户?嗨,dshukertjr,它应该为1,因为它是同一用户。也许我遗漏了在更新数组之前,它应该在附加到数组之前检查用户的uid是否存在。然而,如果你有更好的解决方案,我对它持开放态度。我实际上喜欢你的想法,坦率地说,这可能也是更容易实现的选择。哦,哇,我每天都在学习新的东西。我喜欢你的解决方案,它更优雅。对于计数器,我真的很喜欢增量功能。您可以使用firebase.firestore.FieldValue.increment(1)根据数组的长度将计数器写入文档属性。看看分布式计数器文档,我也喜欢@RobrechtVM的解决方案。增量是一个很好的计数器。你也可以探索这条路线。