ส่งคืนเอกสารในสแน็ปช็อตแบบสอบถามเป็น firestore สตริง json

ฉันมีคำถามที่สร้างในโหนดถึง firestore เพื่อรับชุดเอกสาร ฉันต้องการเขียนคอลเลกชันเป็นสตริง json ที่จะแยกวิเคราะห์โดยแอปพลิเคชัน รหัสของฉันเป็นดังนี้:

serverRef = db.collection('servers');
        getDocs = serverRef.where('online', '==', true).get()
        .then(querySnapshot => {
            if (querySnapshot.empty) {
                res.send("NO SERVERS AVAILABLE");
            } else {
                var docs = querySnapshot.docs;
                console.log('Document data:', docs);
                res.end(JSON.stringify({kind: 'freeforge#PublicServerSearchResponse',servers: docs}));
            }

ฉันได้รับข้อมูลที่ไม่จำเป็นด้วยวิธีนี้ เนื่องจากสิ่งที่ฉันได้รับก็แค่สแนปชอตเอกสารเท่านั้น ฉันจะวนซ้ำสแน็ปช็อตเอกสารและส่งเป็นสตริง json เดียวได้อย่างไร


person Sammi3    schedule 25.12.2018    source แหล่งที่มา


คำตอบ (2)


คลาส QuerySnapshot และ Document ไม่ใช่ประเภท JSON แบบธรรมดา หากคุณต้องการควบคุมสิ่งที่เขียน คุณจะต้องวนซ้ำ querySnapshot (ด้วย map หรือ forEach) และแยกข้อมูล JSON สำหรับตัวคุณเอง

ตัวอย่างหนึ่งที่เป็นไปได้:

serverRef = db.collection('servers');
getDocs = serverRef.where('online', '==', true).get()
.then(querySnapshot => {
    if (querySnapshot.empty) {
        res.send("NO SERVERS AVAILABLE");
    } else {
        var docs = querySnapshot.docs.map(doc => doc.data());
        console.log('Document data:', docs);
        res.end(JSON.stringify({kind: 'freeforge#PublicServerSearchResponse', servers: docs}));
    }
});
person Frank van Puffelen    schedule 26.12.2018

ใครที่กำลังมองหาคำตอบที่กระพือปีกอยู่นี่เลย

    serverRef = db.collection('servers');
    getDocs = serverRef.where('online', '==', true).get()
     .then(querySnapshot => {
       if (querySnapshot.empty) {
          res.send("NO SERVERS AVAILABLE");
          } else {
         var docs = 
         querySnapshot.docs.map(json.decode(json.encode(doc.data())));
       }
     });
person Saurabh Patwal    schedule 17.05.2021