console.log 不同于 json.push

console.log is different from json.push

我正在使用 node.js 导出我在 firestore 中的集合。

到目前为止,集合文档的连接和选择工作正常。

我试图将结构保存在 json 文件中,但结果不是我所期望的。

这是物理文件中的输出:

enter image description here

照片右侧显示为console.log呈现,右侧显示为json.push

记录

我无法让物理文件具有 console.log 中显示的结构。

非常感谢您的帮助。

你会看到这里的结构失败了:"USBCALI|AFILIADO|uqcMSoxdwCTQoLzS2J6brNTZ3Dy2", “:”, {.....

应该是:USBCALI|AFILIADO|uqcMSoxdwCTQoLzS2J6brNTZ3Dy2:{.....

这是代码

const jsonfile = require('jsonfile')

function start (db, file, collection) {
  const ref = db.collection(collection)
  const json = []

  

  console.log(`Getting ${collection}...`)

  ref
    .get()
    .then((snapshot) => {
      snapshot.forEach((doc) => {  
        console.log(doc.id, ':', doc.data())
 json.push(doc.id, ':', doc.data())
      })

      console.log(`Writing ${file}...`)

      jsonfile.writeFile(file, json, {spaces: 2}, err => {
        if (err) {
          console.error(err)
        } else {
          console.log(`Collection ${collection} successfully written to ${file}.`)
        }
      })
    })
    .catch((err) => {
      console.log('Error getting documents', err)
    })
}

module.exports = start

让我解释一下这里发生了什么

console.log(doc.id, ':', doc.data())

正在注销您认为您希望的信息

json.push(doc.id, ':', doc.data()) 每次调用时都会将 3 个元素推入数组。

您真正想要做的是使用 map 函数将数据正确地操作到一个对象中。我正在根据我在此处获得的所有信息做出一些假设,但我猜你想做类似

的事情
var docs snapshot.map( doc =>  ({[doc.id] : doc.data()})
json.push(docs)

而不是

 snapshot.forEach((doc) => {  
        console.log(doc.id, ':', doc.data())
    json.push(doc.id, ':', doc.data())
      })

你也可以这样做(这比 map 方法有点冗长,但本质上会做同样的事情。map 函数就像 sql 或 Linq 中的 select,它很方便将数据从一种形式转换为另一种形式

 snapshot.forEach((doc) => {  
    var currentItem = {[doc.id] : doc.data()}
    json.push(currentItem)
      })

因为你使用了一些 es6 符号,我假设 Computed 属性 Names 是支持的,如果不让我知道,我会想出另一个解决方案