Ограничить количество фильтров равенства в пожарном депо? - PullRequest
0 голосов
/ 14 октября 2018

Я планирую создать систему отслеживания, в которой пользователь может следить за несколькими пользователями.Для моих целей я ожидаю, что пользователь будет следить за 20-25 пользователями.

Так что для создания канала я планирую создать динамическое поле в сообщении, ключ которого - uid пользователя, создающего сообщение, как показано ниже.

{
postText : "random text",
postImage : 'some url',
{userUID} : true
}

Здесь userUID - это идентификатор пользователя, создающего запись.Таким образом, я могу создать запрос вроде:

db.collection('posts')
  .where(useruid1, '==', true)
  .where(useruid2, '==', true)
  .where(useruid1, '==', true)
  .where(useruid3, '==', true)

, где useruid1, useruid2, useruid3 - это пользователи, за которыми я следую.

Так что мне нужно знать, есть лилюбое ограничение на количество фильтров равенства в запросе.Кроме того, больше фильтров повлияет на производительность ??

Я не смог найти ее в документации.Извините, если я пропустил это.

1 Ответ

0 голосов
/ 14 октября 2018

В этом случае вам понадобится запрос 'ИЛИ' или '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);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...