我有一个名为campgrounds的集合,其中每个文档都包含一个指向注释集合中文档的文档引用数组。 看起来像这样Campground
我正在尝试找到一种方法,以在将其发送到我的ejs模板之前填充此注释数组。
我的代码如下
app.get("/campgrounds/:docId", function(req, res) {
var docRef = firestore.collection("campgrounds").doc(req.params.docId);
try {
docRef.get().then(doc => {
if (!doc.exists) {
res.send("no such document");
} else {
// res.send(doc.data());
res.render("campground", {
doc: doc.data(),
title: doc.data().title,
id: req.params.docId
});
}
});
} catch (error) {
res.send(error);
}
});
答案 0 :(得分:0)
在数组中存储DocumentReferences
。如果要获取相应文档的数据以便将该数据包含在对象中,则应使用Promise.all()
执行get()
异步操作的变量号(1个或更多)。
以下内容应该可以工作(但是完全未经测试):
app.get("/campgrounds/:docId", function(req, res) {
var docRef = firestore.collection("campgrounds").doc(req.params.docId);
try {
var campground = {};
docRef.get()
.then(doc => {
if (!doc.exists) {
res.send("no such document");
} else {
campground = {
doc: doc.data(),
title: doc.data().title,
id: req.params.docId
};
var promises = [];
doc.data().comments.forEach((element, index) => {
promises.push(firestore.doc(element).get());
});
return Promise.all(promises);
}
})
.then(results => {
var comments = {};
results.forEach((element, index) => {
comments[index] = element.data().title //Let's imagine a comment has a title property
});
campground.comments = comments;
res.render("campground", campground);
})
} catch (error) {
res.send(error);
}
});
请注意,使用此代码,您将执行1 + N个查询(N是comments
数组的长度)。您可以对数据进行非规范化,然后将campground
的数据直接存储在comments
文档中:然后只需要一个查询。