Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
Javascript firestore中相等筛选器的数量限制?_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript firestore中相等筛选器的数量限制?

Javascript firestore中相等筛选器的数量限制?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我计划创建一个跟踪系统,其中一个用户可以跟踪多个用户。就我的目的而言,我希望一个用户会跟随大约20-25个用户 为了创建提要,我计划在帖子中创建一个动态字段,其键是用户创建帖子的uid,如下所示 { postText : "random text", postImage : 'some url', {userUID} : true } 这里userUID是用户创建帖子的uid。因此,通过这种方式,我可以创建如下查询: db.collection('posts') .where(userui

我计划创建一个跟踪系统,其中一个用户可以跟踪多个用户。就我的目的而言,我希望一个用户会跟随大约20-25个用户

为了创建提要,我计划在帖子中创建一个动态字段,其键是用户创建帖子的uid,如下所示

{
postText : "random text",
postImage : 'some url',
{userUID} : true
}
这里userUID是用户创建帖子的uid。因此,通过这种方式,我可以创建如下查询:

db.collection('posts')
  .where(useruid1, '==', true)
  .where(useruid2, '==', true)
  .where(useruid1, '==', true)
  .where(useruid3, '==', true)
其中,
useruid1
useruid2
useruid3
是我关注的用户

所以我需要知道where查询中的相等过滤器的数量是否有限制。另外,更多的过滤器会影响性能吗


我在文件里找不到。如果我错过了,很抱歉

在这种情况下,您需要一个'OR'或'IN'查询,而不是一系列AND(即,如果是用户订阅的任何用户,您希望返回一个结果)。对于这种情况,您需要创建多个查询/侦听器。这里有一个小例子

// the posts returned from the queries
const posts = new Map();

// array to unsubscribe from listening to firestore
let postUnsubscribe = [];

// function to subscribe to all user posts
const subscribeToPosts = () => {
  usersToFollow = ["user1", "user2", "user3", "user4"];

  postUnsubscribe = usersToFollow.map(userToFollow => {
    return firestore
      .collection("posts")
      .where("useruid", "==", userToFollow)
      .onSnapshot(handlePost);
  });
};

// handles updates to post (for all the users)
const handlePost = querySnapshot => {
  for (let change of querySnapshot.docChanges) {
    if (change.type === "added" || change.type === "modified") {
      posts.set(change.doc.id, change.doc.data());
    } else if (change.type === "removed") {
      posts.delete(change.doc.id);
    }
  }

我意识到我的查询无法工作,因为查询过滤器是like和not或。而且,据我所知,firestore的安全规则就像是要么全有要么全无。他们不会根据访问权限过滤结果。如果这是您的建议。上面更新了以显示如何在firestore中执行多个或类型查询。在安全规则方面,我将尝试花一些时间来详细说明,但是Firestore安全规则允许在不同的表中查找权限,并检查其中是否有内容(即,您可以看到用户是否在跟踪)。感谢您的快速响应。上面的解决方案就是我所实现的。唯一的问题是分页有点难看。现在,我正在做的是,以您在前面两天所展示的方式获取用户的帖子,然后再查询之前两天的帖子,依此类推。它工作得很好,除了冗余查询和不知道在没有结果的情况下停止(我想实现无限滚动)。几天前,对于某些用户可能会有更多的结果,而对于某些用户可能不会。因此,我正在探索其他选择。我将进一步了解基于角色的accessNp。添加了上述安全规则示例的一个小示例。关于变体1的分页,我没有一个很好的答案。我建议首先查询下一个x结果的结果,如果不包含该结果,则转到cloudstore。在安全规则方面做了更多的测试,这将不起作用。;-)我把它拿走了。