Как добавить вложенную коллекцию в только что созданный документ в Firebase? - PullRequest
1 голос
/ 03 марта 2020

Я создаю импортер для некоторых документов в firebase.

Мне нужно иметь подколлекцию (а не просто массив) для определенного c свойства каждого документа, который я добавляю.

В настоящее время у меня есть следующий код, который, кажется, не работает:

let rawdata = fs.readFileSync("files/" + file);
let spot = JSON.parse(rawdata);
var spotFirebase = {
    id: spot.Id,
    sourceId: spot.SourceId,
    type: spot.Type,
    location: new firebase.firestore.GeoPoint(spot.Latitude, spot.Longitude),
    description: spot.Description,
    address: spot.Address,
    city: spot.City,
    country: spot.Country,
    price: spot.Price,
    parkingCost: spot.ParkingCost,
    opening: spot.Opening,
    name: spot.Name,
    features: spot.Features,
    activities: spot.Activities,
    rating: {
        ratingCount: spot.Rating.RatingCount,
        ratingAverage: spot.Rating.RatingAverage
    }
}

db.collection("spots").add(spotFirebase).then(function (docRef) {
    console.log("Document ", file, " written with ID: ", docRef.id, ", index: ", index, ". ", spot.Rating.UserRatings.length);

    spot.Rating.UserRatings.forEach(ur =>
        docRef.collection("userRatings").add(
            {
                date: ur.Date,
                username: ur.UserName,
                review: ur.Review,
                note: ur.Note,
                reviewSource: ur.ReviewSource
            }).then(function (subDocRef) {
                console.log("Review ID  ", subDocRef.id, " written");
            }).catch(function (errorReview) {
                console.error("Error adding document: ", errorReview);
            }));
})
.catch(function (error) {
    console.error("Error adding document: ", error);
});
  1. У меня нет отображаемой ошибки
  2. У меня никогда не было сообщения " Идентификатор рецензии ... записано "
  3. Очевидно, я заканчиваю написанным спот-документом, но без какой-либо оценки пользователя.

Я полагаю, что неправильно добавляю подколлекцию .

Что я сделал не так?

1 Ответ

0 голосов
/ 03 марта 2020

Код не ожидал завершения добавления к подколлекции перед завершением.

Это редактирование учитывает добавление в подколлекцию в тестируемую функцию, собирает обещания для создания каждого нового do * 1007. * в массиве promises, затем ожидает завершения всех этих (Promise.all()) перед завершением ...

function addUserRating(parentRef, ur) {
  const newDoc = {
    date: ur.Date,
    username: ur.UserName,
    review: ur.Review,
    note: ur.Note,
    reviewSource: ur.ReviewSource
  }
  return parentRef.collection("userRatings").add(newDoc).then(result => {
    console.log("Review ID  ", result.path, " written");
    return result
  })
}

db.collection("spots").add(spotFirebase).then(function (docRef) {
  console.log("Document ", file, " written with ID: ", docRef.id, ", index: ", index, ". ", spot.Rating.UserRatings.length);
  let promises = spot.Rating.UserRatings.map(ur => addUserRating(docRef, ur))
  return Promise.all(promises)
}).catch(function (error) {
  console.error("Error adding document(s): ", error)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...