Firebase Cloud 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" } ] },

我在本地存储了以下JSON,我想将其存储在Firebase 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"
           }
       ]
    }
]
商店“资源”的最佳解决方案是什么?因此,当我搜索“指南”(使用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很高兴我能帮上忙!我已经更新了答案,将阵列存储点放在首位。如果你认为我的回答是有帮助的,除了接受之外,你还可以投赞成票。谢谢