将查询快照中的文档作为JSON字符串Firestore返回

时间:2018-12-25 17:15:24

标签: node.js firebase google-cloud-firestore

我在节点中进行了一个查询以存储到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字符串中?

2 个答案:

答案 0 :(得分:1)

QuerySnapshotDocument类不是简单的JSON类型。如果您想控制所写内容,则需要遍历querySnapshot(使用mapforEach)并自己提取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}));
    }
});

答案 1 :(得分:0)

任何寻找颤振答案的人都是这个,

    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())));
       }
     });