angular - 从 Firestore 检索数据为 json
问题描述
在firestore文档中我发现这种方式来获取多数据
db.collection("cities").where("capital", "==", true)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
但是这样我必须在后端创建两个循环来处理并将数据推送到对象中,然后在前端进行另一个循环来显示数据!有什么方法可以逃避第一个循环并返回数据列表而不像这样在后端的循环中处理它
return res.status(200).json(doc.data())
答案
.get()
.then(query=>{
let data = query.docs.map(doc=>{
let x = doc.data()
x['_id']=doc.id;
return x;
})
res.status(200).json(data);
})
这个答案将返回 doc 的 id 作为数据本身的一部分
解决方案
根据https://cloud.google.com/nodejs/docs/reference/firestore/0.17.x/QuerySnapshot
和https://cloud.google.com/nodejs/docs/reference/firestore/0.17.x/QueryDocumentSnapshot
_没有直接的方法可以直接将结果作为 json 对象获取。如果你想要一个数据列表(列表意味着一个数组,所以你不会有 id 作为索引),我会使用数组map
函数:https ://developer.mozilla.org/de/docs/Web/JavaScript/Reference /Global_Objects/数组/地图
return db.collection("cities").where("capital", "==", true)
.get()
.then(function(querySnapshot) {
return querySnapshot.docs.map(doc => {...doc.data(), id: doc.id});
});
如果您不能使用 es6 语法,则替换{...doc.data(), id: doc.id}
为
Object.assign(doc.data(), {id: doc.id});
PS:这将返回一个 Promise 对象而不是数组本身,因此您必须使用.then()
返回的 Promise 或新await
语法
推荐阅读
- dataset - 将 tsv 文件导入 dynamoDB
- java - 再试一次 Do-While 循环
- python - IDLE Shell中多行代码的Python异常错误
- lua - Roblox - 尝试索引字段“?” (零值)运行模块功能的问题
- c# - 创建具有不同配置的相同依赖项的多个实例
- python - 从元素中检索文本时,lxml 不尊重 css 样式
- r - plotly:plotlyOutput 可以与 shiny::plotOutput 互换吗?
- laravel - 如何在 Laravel 中存储 Select2 JS 中的数组值
- python - 如何在我的类中使变量成为全局变量,但只在类中使其成为全局变量?
- spring-integration - 如何将 AWS SQS 入站适配器连接到 AMQP 支持的消息通道?