Мои текущие структуры выглядят так
Посты из коллекции
- PostID
- titel
- content
- titelimgurl
- tags
- timestamp
Теперь получить данные здесь легко, я хочу отделить контент от остальных, чтобы мне не приходилось извлекать ненужные данные на моей странице.
Итак, я планирую использовать эту структуру:
Посты из коллекции
- PostID
- titel
- titelimgurl
- tags
- timestamp
Содержание коллекции
- PostID
- content
Проблема в том, что я не уверен, как эффективно получить данные, например:
var postRef = db.collection("posts").doc(this.docID);
postRef.get().then(function(doc) {
if (doc.exists) {
var contentRef = db.collection("content").doc(doc.id)
contentRef.get().then(function(doc) {
....
}
} else {
// doc.data() will be undefined in this case
console.info("No such document!");
}
}).catch(function(error) {
console.info("Error getting document:", error);
});
Это выглядит чрезмерно сложным, особенно при назначении этих данных фактической коллекции сообщений в моем магазине, и любые идеи о том, как я могу сделать это более эффективным, приветствуются.
@DougStevenson Хорошо, но как мне узнать, когда более эффективно разделить коллекцию на разные части с точки зрения затрат. (Больше прочтений против более крупных чтений)
Невозможно сказать, не зная много о данных, которые вы храните. Если вы хотите знать, что является наиболее эффективным, вам необходимо провести сравнительный анализ и измерение ваших данных.
Если вы хотите запросить базу данных только один раз, вам не следует денормализовать базу данных, создав этот content
как коллекцию верхнего уровня. Вы можете сохранить содержимое сообщения как свойство в документе PostID
. В отличие от базы данных реального времени Firebase, где отображается список объектов post
, вы бы загрузили весь узел posts
, в Cloud Firestore это больше не проблема. Таким образом, вы можете свободно сохранять контент как свойство для выполнения единого запроса.
О, интересно, что это возможно в Firestore, я еще никогда об этом не слышал, у вас есть справочная документация, которую я могу прочитать? Заранее спасибо.
Боюсь, я вас не понимаю. Но вам следует продолжить с первой схемой базы данных, в которой содержимое является свойством в почтовом документе. При использовании этой опции задействуется только операция чтения.
Все в порядке, проблема решена?
Привет, нет, к сожалению, я не смог узнать, как я могу запрашивать только определенные части документа.
Теперь я понимаю, что вы ищете, но, к сожалению, вы не можете запрашивать только определенные части, весь документ или ничего. Пожалуйста, взгляните на мой ответ из этого Почта для лучшего понимания.
Да, именно поэтому я был смущен вашим первоначальным ответом, я был уверен, что нет способа запросить его таким образом. Думаю, мне нужно проверить, что дороже с точки зрения затрат: 2 чтения (разделение содержимого из пост-документа в отдельную коллекцию) или чтение всего содержимого каждой страницы. Спасибо за вашу помощь.
Добро пожаловать, Бэджи! Если вы считаете, что мой ответ вам помог, примите его (✔️) и проголосуйте за (?). Я бы оценил это. Спасибо!
Это довольно стандартно для Firestore и NoSQL в целом, поскольку здесь нет операций «соединения».