2016-01-30 3 views
2

Как бы я структурировал свои данные в firebase, чтобы получить все сообщения, которые текущий пользователь не прокомментировал. Я очень новичок в nosql, и, похоже, я не могу понять, как он структурирует SQL.Структура Firebase data

Это моя попытка на него:

Posts: { 
someUniqueId: { 
    user: userid, 
    content: "blah" 
} 
} 

Comments: { 
someCommentUniqueId: { 
    comment: "ola", 
    post: someUniqueId, 
    user: userid 
} 
} 

Теперь, если выше верно, то я совершенно не знаю, как я бы запрашивать это. Возможно ли это в NOSQL?

ответ

2

У Firebase нет механизма запроса на отсутствие значения. См. is it possible query data that are not equal to the specified condition?

В NoSQL вы часто в конечном итоге моделируете данные для запросов, которые вам нужны. Так что если вы хотите знать, какие посты каждый пользователь все еще может прокомментировать, модель, информация в вашем JSON дерева:

CommentablePosts_per_User 
    $uid 
     $postid: true 

Этот тип структуры часто называют индексом, так как она позволяет эффективно искать соответствующие $postid значения для данного пользователя. Процесс извлечения таких данных из данных часто называют денормализацией. Для (несколько более старого) обзора этой техники см. Это Firebase blog post on denormalization.

Рекомендовать эту статью в хорошем состоянии introduction to NoSQL data modeling.

0

Если я могу предложить несколько вариантов:

Posts: 
    someUniquePostId: 
    user_id_0: false 
    user_id_1: true 
     comment: "dude, awesome post" 
    user_id_2: false 
    user_id_3: true 
     comment: "wicked!" 

дискового пространство является дешевым, поэтому сохраняет все пользовательские идентификаторы в пределах поста позволит вам легко выбрать, какие посты user_id_0 не прокомментирован запросом» для user_id_0: false.

В качестве альтернативы вы можете переворачивать логика

Posts: 
    post_id_0: 
    user_id_1: "dude, awesome post" 
    user_id_3: "wicked" 
    post_id_1: 
    user_id_0: "meh" 
    user_id_2: "sup?" 
Users: 
    user_id_0: 
    no_posts: 
     post_id_0: true 
    user_id_1: 
    no_posts: 
     post_id_1: true 

Это позволит вам запросить какие посты каждый пользователь не отвечал на: в этом случае, user_id_0 не отвечал на post_id_0 и user_id_1 не отвечал на post_id_1

Конечно, в зависимости от ситуации вы также можете опираться на клиентскую логику, чтобы получить нужные вам данные. Например, если вы только заботитесь о том, какие сообщения пользователь не комментировал вчера, вы можете прочитать их запрос по .value вчера и выполнить сравнение в коде, чтобы узнать, является ли их user_id дочерним элементом сообщения. Очевидно, избегая этого, если набор данных большой.