Firebase Cloud Firestore和函数-使用对象数组存储文档
我在本地存储了以下JSON,我想将其存储在Firebase Firestore上:Firebase Cloud Firestore和函数-使用对象数组存储文档,firebase,google-cloud-firestore,google-cloud-functions,Firebase,Google Cloud Firestore,Google Cloud Functions,我在本地存储了以下JSON,我想将其存储在Firebase Firestore上: guides: [ { "id":0 "name":"name0", "sources":[ { "type":"s3", "url":"https://s3.amazonaws.com/xxxx/file0.mp3" } ] },
guides: [
{
"id":0
"name":"name0",
"sources":[
{
"type":"s3",
"url":"https://s3.amazonaws.com/xxxx/file0.mp3"
}
]
},
{
"id":1
"name":"name1",
"sources":[
{
"type":"s3",
"url":"https://s3.amazonaws.com/xxxx/file1.mp3"
}
]
}
]
商店“资源”的最佳解决方案是什么?因此,当我搜索“指南”(使用firebase云函数)时,它也会检索源代码列表,而不会对源代码的每个元素进行不同的搜索
在Firebase Firestore中,数组类型不允许对象列表,我尝试了“引用”,但它返回引用文档的“结构和设置”
function getGuides(guideId,response){
db.collection('guides')
.where('id', '==', guideId).get()
.then(snapshot => {
let guideDoc = snapshot.docs.map( doc => {
return doc.data()
})
return guideDoc;
})
在您的回答中,您说“在Firebase Firestore中,数组类型不允许对象列表” 这是不正确的:您可以将对象存储在数组中。使用Firebase控制台,您必须首先选择阵列数据类型,然后为每个阵列成员选择映射类型。使用JavaScript SDK,您可以保存包含对象数组的文档
基于上述情况,在使用Firestore时,您可以采用以下方法:
guides: [
{
"id":0
"name":"name0",
"sources":[
{
"type":"s3",
"url":"https://s3.amazonaws.com/xxxx/file0.mp3"
}
]
},
{
"id":1
"name":"name1",
"sources":[
{
"type":"s3",
"url":"https://s3.amazonaws.com/xxxx/file1.mp3"
}
]
}
]
- 收集
文档指南
- 对于本系列中的每个
文档:指南
- 使用
值作为文档id李>id
- 有一个数组类型的字段
,其中存储的对象与问题中显示的对象类似sources
- 使用
id
查询指南
,并获得如下数组:
var docRef = db.collection("guides").doc(guideId);
docRef.get().then(doc => {
if (doc.exists) {
const sourcesArray = doc.data().sources;
sourcesArray.forEach((element) => {
console.log(element.type);
console.log(element.url);
});
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
对于给定的
指南
它们是多个源
还是只有一个?谢谢,我的问题是我不知道Firestore可以将对象存储在数组中。@JoseAntonio很高兴我能帮上忙!我已经更新了答案,将阵列存储点放在首位。如果你认为我的回答是有帮助的,除了接受之外,你还可以投赞成票。谢谢