Я делаю веб-приложение с FireBase в качестве базы данных, но у меня возникла проблема при программировании на JavaScript. У меня есть два разных набора коллекций с информацией в них. Чтобы избежать дублирования, мне нужно объединить их, чтобы получить от них данные. Для этого я создал идентификаторы в одной из коллекций, чтобы связать их с другой.
Вот код, который я пробовал из другого стека переполнение Ссылка на этот форум
db.collection("articlesCollection")
.doc(articleId)
.get()
.then(article => {
firebase.firestore().collection("commentsCollection")
.where('articleRef.' + article.id, '==', true)
.get()
.then(results => {
results.forEach(function (comment) {
console.log(comment.id, " => ", comment.data());
});
});
});
Это код из приведенного выше кода, который я пытался переназначить, но в итоге остановился, не понимая, как работает его структура.
db.collection("Users").get().then(article => {
firebase.firestore().collection("trips").where('Users.' + doc.id, '==', ownersID)
.get()
.then(results => {
//got lost here. I need the forEach function, but
results.forEach(function (comment) {
console.log(comment.id, " => ", comment.data());
//eventually change these into variables to display in a
//form.
});
});
});
Ниже будет краткое изложение структуры моей базы данных. Также будет информация, которую я буду использовать () для описания происходящего.
Trips\uniqueID(generated by Google)\ownerID(& other info)
Users\ownerID\info.
Как вы можете видеть, ownerID находится в двух наборах коллекций. Мне нужна информация из коллекции поездок о том, куда они идут.
Мне нужна информация из коллекции Users, потому что она содержит информацию о владельце, такую как имя и адрес электронной почты
После исследования, проб и ошибок вот что я нашел, что может помочь с этим.
Вот что у меня было раньше. Надеюсь, это даст мне больше информации о том, что я пытаюсь сделать с моим JavaScript.
db.collection("trips").where("flag", "==", true)
.get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
//this info needs to be taken from the Users collection
var fiName = doc.data().fName;
var laName = doc.data().lName;
var fullName = fiName + " " + laName;
var wscEmail = doc.data().wscEmail;
var phoneNum = doc.data().phoneNumber;
//Information that I can take from the trips table.
var id = doc.data().ownerID;
var idName = doc.id;
var destination = doc.data().destination;
var location = doc.data().location;
var date = doc.data().dateGoing;
var arrivalTime = doc.data().arrivalTime;
var departureTime = doc.data().departureTime;
var returnTime = doc.data().returnTime;
var seats = doc.data().seats;
//leave this for now. Gopal is working on it
//var email = "temp@Email";
//This is something we can do, but we can also leave it
//var phoneNum = "(712) 111-2211";
var description = doc.data().tripDescription;
feed.innerHTML += " \
<div'>\
<div class='post'>\
<div>\
<img src='circleProfile.png' alt='User photo'>\
<div class='name'> <p>" + fullName + "</p></div>\
<div>Destination: <span class='postInfo'>" + destination + "</span></div>\
<div>Location: <span class='postInfo'>" + location + "</span></div>\
<div>Date: <span class='postInfo'>" + date + "</span></div>\
<table>\
<tr>\
<th>Departure</th>\
<th>Arrival</th>\
<th>Return</th>\
<th>Seats</th>\
</tr>\
<tr>\
<td>" + departureTime + "</td>\
<td>" + arrivalTime + "</td>\
<td>" + returnTime + "</td>\
<td>" + seats + "</td>\
</tr>\
</table>\
<div>\
<p>Email: " + wscEmail + " <span class='postInfo'>" + phoneNum + "</span></p>\
</div>\
<div class='description'><p>" + description + "</p></div>\
<div class='spaceWars' onclick='deletePost(this.id)' id=" + idName + "> <button> Click me</button> </div>\
</div>\
</div>\
</div>";
});
});
});
Как вы видели, в этой таблице есть информация, которая мне нужна из другой коллекции. Проблема в том, что я не знаю, как включить другую коллекцию.
Примечание: я впервые работаю с нереляционной базой данных, поэтому форматирование и структура, стоящие за ней, отбрасывают меня. Существует также тот факт, что есть некоторые вещи, для которых у firebase еще нет функциональности, что делает эту задачу немного сложнее.
Спасибо за чтение, я знаю, что это было много, и если вы пройдете через все это и поймете, что я делаю, я очень ценю это. Надеюсь, в будущем это поможет другим понять.