Как подсчитать уникальные голоса в Firestore? - PullRequest
0 голосов
/ 28 января 2020

Я создаю приложение, в котором пользователи могут голосовать за сообщения и создавать свои собственные сообщения. Поскольку в документе может храниться не более 1 Мб, я не знаю, чтобы отслеживать уникальные голоса и количество голосов.

Когда я создаю нового пользователя, я создаю его так:

collection('users').document(user.uid).setData({
        'name': name + ' ' + surname,
        'email': user.email,
        'registerDate' : DateTime.now(),
        'isEmailVerified': user.isEmailVerified,// TODO: Email Verification
        'location': location,
        'photoUrl': user.photoUrl,
        'posts' : [],

      });

Когда я создаю новое сообщение, я создаю его следующим образом:

collection('posts').document(imageId).setData({
        'userId': user.uid,
        'user' : user.displayName,
        'title' : title,
        'post' : post,
        'location': location,
        'postDate' : DateTime.now(),
        'upVote' : 1,
        'downVote' : 0,
        'absVote' : 0,
        'votedBy' : [user.uid], // list of users who voted the post.

      });

Я также добавляю сообщение в массив сообщений пользователя.

Я думаю, что я делаю ошибку из-за 'votedBy' поле в коллекции 'posts'. Это поле может заполнить максимальный размер документа, который составляет 1 МБ. Есть ли лучший подход для отслеживания голосов?

Я думаю, что я также не могу хранить голоса в коллекции пользователей. В случае, если пользователь проголосует за слишком много сообщений, ограниченный размер будет снова превышен.

1 Ответ

2 голосов
/ 28 января 2020

Правильный способ реализации неограниченных списков - использование одного документа на элемент в новой подгруппе: users в posts.

В вашем случае:

posts/:postId/users/:userId

Firestore предназначен для массового увеличения количества документов в коллекции, у вас не будет проблем с масштабированием.

...