在Loop中将数据添加到Cloud Firestore

Lak*_*pal 1 node.js firebase google-cloud-functions google-cloud-firestore

我有一个嵌套的json,它具有一个键和值是另一个具有键和值的json。下面是json。

        {
            "Testicular Torsion": {
                "What is testicular torsion?": "ABC",
                "Symptoms": "AB",
                "Risks": "AL",
                "Diagnosis": "LK",
                "Treatment": "UY"
            },
             "XYZ": {
                "X": "ABC",
                "Symptoms": "AB",
                "Risks": "AL",
                "Diagnosis": "LK",
                "Treatment": "UY"
            }
    };
Run Code Online (Sandbox Code Playgroud)

我想做的是将数据插入Firebase的Cloud Firestore中。以下是相同的代码。但是问题是,仅插入了第一个键值对(在这种情况下,是Testicular Torsion键及其值为另一个JSON),而没有插入其他键值对。为什么会这样,代码中需要做什么?

var string_medical_data = JSON.stringify(medical_json);
var json_medical = JSON.parse(string_medical_data);

function abc(poi){
  firestore.collection('medical').doc(poi).set(json_medical[poi])
    .then(() => {
      return console.log("Added");
  })
  .catch((e => {
    console.log('error: ', e);
    return console.log(e);
  }))
}


exports.medical = functions.https.onRequest((request, response) => {

  var problems = [];
  for(var myKey in json_medical) {
   problems.push(myKey);
   break;
}

for(var i=0;i<problems.length;i++){

  // firestore.collection('medical').doc(problems[i]).set(json_medical[problems[i]])

  abc(problems[i]);

}

response.send({
  'fulfillmentText': `Success!!!`
});

});
Run Code Online (Sandbox Code Playgroud)

abr*_*ham 6

您最好在批处理请求中执行此操作。您可以在一个请求中提交多个写入。如果您的数据有500多个条目,则必须将其分解并一次执行500个。

exports.medical = functions.https.onRequest((request, response) => {
  var batch = firestore.batch();
  for(var myKey in json_medical) {
    var myKeyRef = firestore.collection('medical').doc(myKey);
    batch.set(myKeyRef, json_medical[myKey]);
  }
  batch.commit().then(function () {
    response.send({
      'fulfillmentText': `Success!!!`
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案!简单有效。干杯! (2认同)