Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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
Java 从我使用Firestore跟踪的人那里获取帖子_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 从我使用Firestore跟踪的人那里获取帖子

Java 从我使用Firestore跟踪的人那里获取帖子,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正在我的移动应用程序上使用Cloud Firestore。我想从我关注的用户那里获取内容。现在: 因此,我正在尝试以下查询,以从我跟踪的人那里获取内容 ref = FirebaseFirestore.getInstance().collection("topics"); ref.whereEqualTo("username","user1"); ref.whereEqualTo("username","user2"); 但当我使用这个查询时,它只显示来自第一个用户(user1)的帖子 如果

我正在我的移动应用程序上使用Cloud Firestore。我想从我关注的用户那里获取内容。现在:

因此,我正在尝试以下查询,以从我跟踪的人那里获取内容

ref = FirebaseFirestore.getInstance().collection("topics");
ref.whereEqualTo("username","user1");
ref.whereEqualTo("username","user2");
但当我使用这个查询时,它只显示来自第一个用户(user1)的帖子


如果我跟踪10K用户会怎么样。从他们那里获取最新帖子的最佳方式是什么?

Firestore不支持您尝试执行的此类查询。您假设向whereEqualTo()添加更多调用,每个调用都将像逻辑OR一样应用,并且将返回与任何条件匹配的任何文档。在Firestore中,添加更多条件是一个逻辑AND,这意味着所有条件都必须为true,文档才能匹配


为了支持要执行的查询类型,您必须重新构造数据库。这对于noSQL类型的数据库非常常见。没有一个结构支持所有类型的查询。在您的情况下,您需要按用户记录他们关注的其他用户,并查询这些用户以获得您想要的。您可能需要执行多个查询以获取案例所需的所有信息。

Firestore不支持您尝试执行的此类查询。您假设向whereEqualTo()添加更多调用,每个调用都将像逻辑OR一样应用,并且将返回与任何条件匹配的任何文档。在Firestore中,添加更多条件是一个逻辑AND,这意味着所有条件都必须为true,文档才能匹配


为了支持要执行的查询类型,您必须重新构造数据库。这对于noSQL类型的数据库非常常见。没有一个结构支持所有类型的查询。在您的情况下,您需要按用户记录他们关注的其他用户,并查询这些用户以获得您想要的。您可能需要执行多个查询以获取案例所需的所有信息。

有两种方法来处理此问题。第一种方法是使用Firebase的云函数来侦听用户创建的任何文档,然后调用一个方法,该方法会将创建的文档的副本发送给每个跟踪的用户。
第二个是Doug Stevenson提到的,基本上你必须创建一个包含所有用户的集合或文档,然后你可以调用每个用户来获取你的数据。

有两种方法来处理这个问题。第一种方法是使用Firebase的云函数来侦听用户创建的任何文档,然后调用一个方法,该方法会将创建的文档的副本发送给每个跟踪的用户。
第二个是Doug Stevenson提到的,基本上你必须创建一个包含所有用户的集合或文档,然后你可以调用每个用户来获取你的数据。

你能举一些例子吗?我的意思是Firebase在这个应用程序的所有其他部分都工作得很好。但我想做的是使用云函数。所以我能做的就是把一篇新文章复制到所有作者的追随者部分。这样他们的追随者就可以通过直接查询得到下面所有的帖子。但是如果用户有10万追随者呢。我应该运行10万次循环吗?您要么在写入数据时花费更多的代码/时间复制数据,要么在读取数据时花费更多的代码/时间。没有其他选择。好。。。除非你想得到一系列用户,在这种情况下你可以
startAt(“user01”).endAt(“user10”)
。你能举个例子吗?我的意思是Firebase在这个应用程序的所有其他部分都工作得很好。但我想做的是使用云函数。所以我能做的就是把一篇新文章复制到所有作者的追随者部分。这样他们的追随者就可以通过直接查询得到下面所有的帖子。但是如果用户有10万追随者呢。我应该运行10万次循环吗?您要么在写入数据时花费更多的代码/时间复制数据,要么在读取数据时花费更多的代码/时间。没有其他选择。好。。。除非您想获得一系列用户,否则在这种情况下,您可以
startAt(“user01”).endAt(“user10”)
。我目前正在做的是您提到的第一个过程。但是如果追随者数量超过100k+,我会有什么问题吗?云功能是您的正确选择,它会随着用户节点的增长而扩展。不要担心云函数可以轻松处理它。@Robotec,正如您在第一个过程中提到的,如果用户获得了新的关注者,doe的Firebase函数会自动向该新关注者添加帖子吗?确实会,假设一个新关注者将其用户ID添加到关注者ID列表中,Firebase函数会是什么(在写文章时触发)我要做的是读取ID列表并将帖子发送给其中的每个人。你需要使用批写来处理向关注者发送帖子的过程。我目前正在做的是你提到的第一个过程。但是如果关注者数量超过100k+,我会遇到任何问题吗?云函数是适合你的选择,它可以扩展为你的用户节点在增长。别担心云函数可以轻松处理它。@Robotec正如你在第一个过程中提到的那样,如果一个用户有了新的关注者,doe的Firebase函数会自动向该新关注者添加帖子吗?确实会,假设一个新关注者将他/她的用户ID添加到你的关注者ID列表中,Firebase函数会做什么(写帖子时触发)要做的是读取ID列表并将帖子发送给其中的每个人。您需要使用批写来处理将帖子发送给关注者的过程。