限制Firestore中的相等过滤器数量?

时间:2018-10-14 11:02:16

标签: javascript firebase google-cloud-firestore

我正计划创建一个关注系统,其中一个用户可以关注多个用户。出于我的目的,我希望一个用户能够关注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)

其中useruid1useruid2useruid3是我关注的用户。

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

我在文档中找不到它。对不起,如果我错过了。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要使用“ 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);
    }
  }