Как получить документы в FireStore с нижеприведенной структурой данных? - PullRequest
0 голосов
/ 12 мая 2018

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

Требования:

  1. Показать последние k сообщений независимо от пользователей (последние k сообщений по всей базе данных)

  2. Показать сообщения, соответствующие нескольким пользователям (сообщения, соответствующие пользователю, на которого я подписан)

Ниже приведены две структуры данных, о которых я мог подумать, но все еще не в состоянии выполнить 2-е требование.

Структура данных1:

/posts/{postId}/
               -authorId          //one among /users/{userId}
               -message
               -date 
/users/{userId}/
               -name
               -etc...

Req1: Показать последние k сообщений независимо от пользователей

constructor(private afs: AngularFirestore) {}

// code to fetch latest k posts
this.afs.collection("posts").ref
        .orderBy("date", "desc")
        .limit(k)
        .get().then(snapshot => {
              snapshot.forEach(postDoc => {
                   console.log(postDoc.data());
                   // rest of the code
              });
        });

Req2: Показать сообщения, соответствующие нескольким пользователям Проблема: в приведенном выше коде, если я добавлю метод «где», он может фильтровать только для одного authorId, а не для нескольких. например

this.afs.collection("posts").ref
        .where("authorId" == "xyz...")
        .orderBy("date", "desc")
        .limit(k)

Структура данных2:

/users/{userId}/
               -name
               -etc...
               /posts/{postId}/      (collection inside user document)
                               -message
                               -date 

Не уверен, но я думаю, что структура данных была бы более эффективной, чем структура данных1, потому что при поиске публикаций, соответствующих пользователям, за которыми я следую, нет необходимости искать всю коллекцию публикаций, просто посмотрите на коллекцию записей пользователи, на которых вы подписаны Вопрос: как получить последние k сообщений в приведенной выше структуре данных?

1 Ответ

0 голосов
/ 13 мая 2018

Не стесняйтесь поддерживать две структуры данных в вашей базе данных. Это довольно классический подход в базах данных NoSQL, называемый «денормализация» (в отличие от известной нормализации баз данных SQL).

Взгляните на эту статью , которая объясняет «Методы моделирования данных» для баз данных NoSQL и говорит, что «денормализация может быть определена как копирование одних и тех же данных в несколько документов или таблиц , чтобы упростить / оптимизировать обработку запросов или , чтобы вписать данные пользователя в конкретную модель данных".

Недостатком является то, что вам необходимо поддерживать синхронизацию двух структур, но это легко сделать с помощью Пакетная запись в Firestore, см. Документацию здесь https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes

...