Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用NodeJS读取csv并写入mongodb_Javascript_Node.js_Mongodb_Csv_Mongoose - Fatal编程技术网

Javascript 使用NodeJS读取csv并写入mongodb

Javascript 使用NodeJS读取csv并写入mongodb,javascript,node.js,mongodb,csv,mongoose,Javascript,Node.js,Mongodb,Csv,Mongoose,我有一个大的csv,我需要读取t并插入mongodb Csv包含用户名、类别名称和策略名称 需要使用类别id和策略id将用户插入用户集合。Csv仅提供类别名称和策略名称。所以我需要使用集合的名称从集合中获取类别id 如果类别名称不存在,请创建一个新的类别名称并返回其id。策略的大小写相同 所以我试过了 fs.createReadStream('./data_sheet.csv') .pipe(csv()) .on('data', async (row) => {

我有一个大的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)
}
}


这是不正确的工作方式。正确的方法是什么?

如果您所说的“不工作”是指类别中没有出现数据,那么请确保采用正确的异步方法,或者提供更多信息

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

  • 将csv文件导入到对象数组中
  • 在对象上循环以与类别Id匹配
  • 如果没有,则创建类别Id
  • 返回到main函数
  • 更新文档[在这里,您可以使用我们所做的步骤2循环,一次更新全部或一个文档]

  • 不以正确的方式工作是什么意思?我们可以这样做,将csv转换为json对象数组并在那里循环。有没有办法在('data',async(row)=>{//console.log(row)let res=wait Category.findOneOrCreate({name:row.cat.trim()});console.log(res)})上调用此函数这是我的疑问。或者有必要创建一个数组和rest函数吗?我们可以这样做,将csv创建到json对象的数组并在那里循环。有没有办法在('data',async(row)=>{//console.log(row)let res=wait Category.findOneOrCreate({name:row.cat.trim()});console.log(res)})上调用此函数这是我的疑问。还是有必要创建一个数组和rest函数?让我澄清一下,您想将数据事件作为单独的函数调用吗?我需要读取csv并插入数据库。它包含类别并插入到单独的集合中,并在用户集合数据中使用类别id。我可以使用工作线程吗?