Хранение вложенных коллекций в Firestore с использованием Javascript - PullRequest
0 голосов
/ 14 мая 2019

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

• threads: collection
  |
  +---- • friend_id: str
        • last_messaged: timestamp
        • messages: collection
          |
          +---- • sender_id: str
                • text: str
                • timestamp: timestamp

Теперь, скажем, мой друг с идентификатором 420 впервые отправляет мне сообщение. Я хотел бы сохранить эти данные, создав новую тему. Допустим, я делаю это с помощью следующей команды:

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var db = admin.firestore();

var thread_id = '212';
var message_id = '3498213712';

db.collection('threads').add({
    id: thread_id,
    friend_id: '420',
    last_messaged: 1557862539,
    messages: [
        {
            id: message_id,
            sender_id: '420',
            text: 'Hello',
            timestamp: 1557862539
        }
    ]
})

Это правильный способ делать вещи? Будет ли автоматически создаваться коллекция с именем messages, поскольку я отправляю объект JSON в это поле? Если нет, то как я могу сделать это правильно?

РЕДАКТИРОВАТЬ : Возможно, я не был достаточно ясен ранее. Я хочу, чтобы messages был sub-collection. Прямо сейчас это массив, согласно комментарию ниже.

EDIT2 : И threads id, и messages не случайны. Обновите код, чтобы отразить это.

НЕ ДУБЛИРОВАТЬ : Не дубликат вопроса, связанного в комментариях, потому что этот вопрос относится к Java и Android SDK, а этот вопрос к Javascript.

1 Ответ

1 голос
/ 14 мая 2019

Вы должны создать ссылку на документ, а затем создать его содержимое, используя set() для этой ссылки вместо add() (поскольку add всегда создает новый произвольный идентификатор документа).Это подробно описано в документации , которую я настоятельно рекомендую изучать, чтобы понять, как работает Firestore.Вы будете много использовать эту информацию.

Чтобы создать документ с известным идентификатором (в переменной thread_id) в документе верхнего уровня:

db.collection('threads').doc(thread_id).set({
    friend_id: '420',
    last_messaged: 1557862539
})

Чтобы создать документ сизвестный идентификатор во вложенной коллекции, он точно такой же, за исключением того, что вы должны указать имя вложенной коллекции в пути ссылки на документ:

db.collection('threads').doc(thread_id).collection('messages').doc(message_id).set({
    sender_id: '420',
    text: 'Hello',
    timestamp: 1557862539
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...