附件是firebase的参考资料
我将数据保存为此处 在此输入图片描述
const productRef = await addDoc(collection(db, `rating_book/${product.bk_ID}/ratings`), {
bookId: product.bk_ID,
date: Timestamp.now(),
rating: rating,
token: JSON.parse(localStorage.getItem('user')!).token,
username: JSON.parse(localStorage.getItem('user')!).username
});
这是来自 firebase 的完整图片的另一个快照。 在此输入图片描述
我正在尝试获取数据,但我没有在这里获取数据。为什么?
const fetchTopRatedBookIds = async() => {
try {
const ratingsSnapshot = await getDocs(collection(db, 'rating_book'));
const bookRatings: { [bookId: string]: number[] } = {};
await Promise.all(ratingsSnapshot.docs.map(async (doc) => {
const ratings = doc.data().ratings as number[];
bookRatings[doc.id] = ratings;
console.log(`Book ID: ${doc.id}, Ratings: ${ratings}`);
}));
const averageRatings = Object.entries(bookRatings).map(([bookId, ratings]) => ({
bookId,
averageRating: ratings.reduce((acc, curr) => acc + curr, 0) / ratings.length,
}));
console.log('Average Ratings:', averageRatings);
const sortedBooks = averageRatings.sort((a, b) => b.averageRating - a.averageRating).slice(0, 3).map(entry => entry.bookId);
console.log('Sorted Books:', sortedBooks);
return sortedBooks;
} catch (error) {
console.error('Error fetching details', error);
return [];
}
};
如有任何建议,我们将不胜感激。
您的代码正在将文档添加到嵌套在
ratings_book
内的文档下的称为(评级)的单个子集合中:
addDoc(collection(db, `rating_book/${product.bk_ID}/ratings`)
这些
ratings
子集合与 rating_book
完全不同。
您的查询仅考虑直接位于
rating_book
中的文档,而不是嵌套集合:
await getDocs(collection(db, 'rating_book'))
此查询始终不会返回任何文档,因为
rating_book
集合中没有直接的文档。
Firestore 查询很浅,不考虑嵌套子集合。
如果要查询评级子集合中的所有文档,则需要使用集合组查询。
await getDocs(query(collectionGroup(db, 'rating_book')))
要么,要么根本不将文档添加到嵌套子集合中,而是对所有文档使用单个集合。