сохранить данные диалога в firestore - PullRequest
0 голосов
/ 28 апреля 2020

Я ищу способ хранения диалоговых данных в Cloud Firestore. Я новичок в Нет SQL Базы данных, поэтому любые советы приветствуются.

Моя цель заключается в следующем: я хочу коллекцию под названием "диалоги", которая затем сохраняет различные диалоги в следующем формате (или аналогичном)

dialogs:[
  {
    id:1,
    dialog: [
      {
        text: "hello is this a text?",
        turn: 0
      },
      {
        text: "yes this is a text",
        turn: 1
      }
    ],
  },
  {
    id: 2,
    dialog:[
      {
        text: "is this another text?",
        turn: 0
      },
      {
        text: "yes this is another text",
        turn: 1
      }
    ]
  }
]

Мой текущий подход в моем веб-приложении выглядит следующим образом:

db.collection("dialogs").add({id:1,dialog:[]})

Прежде всего, я хотел бы знать, возможна ли такая структура (она не обязательно должна будь эта структура).

Во-вторых, возможно ли создать уникальный идентификатор, а затем запросить конкретный идентификатор?

РЕДАКТИРОВАТЬ: я пришел с этим подходом

const docRef = db.collection("dialogs").doc();
const dialog = {
  dialogId: docRef.id,
  intent: "SYMPTOM_INFORMATION",
  utterance: this.userInput,
  state: [],
  issuer: "USER",
  turn: 0
};
docRef.add(dialog)

Теперь мне неясно, как я запрашиваю все документы с одинаковыми dialogId

1 Ответ

1 голос
/ 29 апреля 2020

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

let data = {
  numberExample: 1,
  objectExample: {
    stringExample: "is this another text?",
    numberExample: 1
  }
};

let setDoc = db.collection('dialogs').doc('SET_YOUR_DOCUMENT_ID').set(data);

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

Edit1:

Для запроса всех dialog документов в коллекции dialogs, которые удовлетворяют одному и тому же условию id:

let dialogsRef = db.collection('dialogs');
let query = dialogsRef.where('id', '==', '1').get()
  .then(snapshot => {
    if (snapshot.empty) {
      console.log('No matching documents.');
      return;
    }  

    snapshot.forEach(doc => {
      console.log(doc.id, '=>', doc.data());
      // TODO: do something with the data.  
    });
  })
  .catch(err => {
    console.log('Error getting documents', err);
  });

Для запроса всех dialog документов и их id поле внутри dialogs коллекции:

let dialogsRef = db.collection('dialogs');
let allDialogs = dialogsRef.get()
  .then(snapshot => {
    snapshot.forEach(doc => {
      console.log(doc.id, '=>', doc.data());
      // TODO: do something with the data.   
    });
  })
  .catch(err => {
    console.log('Error getting documents', err);
  });

Более подробную информацию можно найти в документации .

...