【问题标题】:Read csv and write to mongodb using NodeJS使用 NodeJS 读取 csv 并写入 mongodb
【发布时间】:2021-04-02 21:12:59
【问题描述】:

我有一个很大的 csv,我需要读取 t 并插入到 mongodb

Csv 包含用户名、类别名称和策略名称。

需要使用类别 ID 和策略 ID 将用户插入用户集合。 CSV 仅提供类别名称和策略名称。所以我需要使用它的名称从集合中获取类别 ID。

如果类别名称不存在,则创建一个新类别并返回其 id。政策也是如此。

所以我尝试了

    fs.createReadStream('./data_sheet.csv')
    .pipe(csv())
    .on('data', async (row) => {
        // console.log(row)
        let res = await Category.findOneOrCreate({ name: row.cat.trim() });
        console.log(res)

    })
    .on('end', () => {
        console.log('CSV file successfully processed');
    });



categorySchema.statics.findOneOrCreate = async function findOneOrCreate(condition) {
try {
    const self = this
    let agent = await self.findOne(condition)
    console.log("condition")
    console.log(condition)
    console.log("agent")
    console.log(agent)
    if (agent) return agent._id
    else {
        agent = await self.create(condition)
        return agent._id
    }
} catch (e) {
    console.log(e)
}

}

这不能正常工作。这样做的正确方法是什么?

【问题讨论】:

  • 工作不正常是什么意思?
  • 我们可以这样做,将 csv 转换为 json 对象数组并在那里循环。有什么方法可以在.on('data', async (row) => { // console.log(row) let res = await Category.findOneOrCreate({ name: row.cat.trim() }); console.log(res) }) 上调用它,这是我的疑问。还是需要做一个数组和rest函数?

标签: javascript node.js mongodb csv mongoose


【解决方案1】:

如果你的意思是不工作,数据没有出现在类别中,那么请确保你遵循正确的异步方法或提供更多信息。

有几件事要记住, 您可能需要为递归过程创建一个 cronjob

  1. 将 csv 文件导入到 Object 数组中
  2. 遍历对象以匹配类别 ID
  3. 如果没有,则创建一个类别 ID
  4. 返回主函数
  5. 更新文档 [在这里您可以使用我们所做的第 2 步循环更新全部或一次更新一个]

【讨论】:

  • 我们可以这样做,将 csv 转换为 json 对象数组并在那里循环。有什么方法可以在.on('data', async (row) => { // console.log(row) let res = await Category.findOneOrCreate({ name: row.cat.trim() }); console.log(res) }) 上调用它,这是我的疑问。还是需要做一个数组和rest函数?
  • 让我澄清一下,您希望将数据事件作为单独的函数调用吗?
  • 我需要读取一个 csv 并插入到数据库中。它包含类别并插入到单独的集合中,并使用类别 ID 到用户集合数据中
猜你喜欢
  • 2020-05-18
  • 2017-04-05
  • 2020-06-22
  • 2021-04-28
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多