【发布时间】: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