我正在审查一个nodeJS程序,有人编写了该程序以合并两个文件中的对象并将数据写入mongodb。我一直在努力思考它的工作原理-尽管我运行了它并且效果很好。 它住在这里:https://github.com/muhammad-asad-26/Introduction-to-NodeJS-Module3-Lab
首先,有两个JSON文件,每个文件包含一个由1,000个对象组成的数组,这些对象被“拆分”,并且实际上是要合并的记录。目标是将两个文件的第一个对象合并在一起,然后将两个第二个对象……每个文件中的第1,000个对象合并,并插入db中。
以下摘录为您提供背景信息:
const customerData = require('./data/m3-customer-data.json')
const customerAddresses = require('./data/m3-customer-address-data.json')
mongodb.MongoClient.connect(url, (error, client) => {
customerData.forEach((element, index) => {
element = Object.assign(element, customerAddresses[index])
//I removed some logic which decides how many records to push to the DB at once
var tasks = [] //this array of functions is for use with async, not relevant
tasks.push((callback) => {
db.collection('customers').insertMany(customerData.slice(index, recordsToCopy), (error, results) => {
callback(error)
});
});
})
})
据我所知, 元素= Object.assign(element,customerAddresses [index]) 在每次迭代期间修改当前元素-IE源文件中的JSON对象
对此进行备份, db.collection('customers')。insertMany( customerData .slice(index,recordsToCopy) 似乎进一步证实了,当将完成的合并数据写入数据库时,作者正在读取该原始的customerData文件-仅当完成的合并数据位于其中时才有意义。
由于源文件未更改,所以按重要性排列的两件事使我感到困惑:
1)合并后的数据在写入数据库之前会存放在哪里?客户数据文件在运行时结束时保持不变。
2)使用数组语法访问JSON文件时,它叫什么?我不知道您是否可以在没有fs模块或类似功能的情况下读取文件。作者仅使用require('filename')读取文件。我想了解更多有关此的信息。
谢谢您的帮助!
答案 0 :(得分:0)
问题1:
合并后的数据在发送到数据库之前,先存在于customerData
变量中。它仅在调用insertMany
时存在于内存中,并作为参数传递。没有理由要覆盖文件系统上的任何内容-实际上,每次调用数据库时修改.json
文件都是低效的-存储信息是数据库的工作,而不是数据库的工作。文件在您的应用程序中。 如果您要覆盖文件,这将很容易-只需在fs.writeFile('./data/m3-customer-data.json', JSON.stringify(customerData), 'utf8', console.log('overwritten'));
之后添加insertMany
之类的内容即可。确保包括const fs = require('fs');
。为了使情况更清楚,请尝试将customerData.length
的值写入文件。
问题2:
查看节点require()
上的docs。它所做的就是解析JSON文件中的数据。
这里没有魔术。使用require将静态json文件解析为数组,并将其作为customerData
变量存储在内存中。它的值被操纵并发送到可以存储它的其他计算机。由于代码是最初编写的,因此json文件的唯一用途就是读取。