Javascript 使用NodeJS读取csv并写入mongodb
我有一个大的csv,我需要读取t并插入mongodb Csv包含用户名、类别名称和策略名称 需要使用类别id和策略id将用户插入用户集合。Csv仅提供类别名称和策略名称。所以我需要使用集合的名称从集合中获取类别id 如果类别名称不存在,请创建一个新的类别名称并返回其id。策略的大小写相同 所以我试过了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) => {
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转换为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。我可以使用工作线程吗?