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 是支持的,如果不让我知道,我会想出另一个解决方案
我正在使用 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 是支持的,如果不让我知道,我会想出另一个解决方案