【问题标题】:MongoImport csv combine/concat various columns to one array for importMongoImport csv 将各种列组合/连接到一个数组以进行导入
【发布时间】:2019-06-04 18:59:48
【问题描述】:

我还有一个以前从未遇到过的有趣案例,所以我向 SO 社区寻求帮助并分享我的经验。

案例 ||我们有什么:

  1. 具有这种结构的csv 文件(从其他 SQL DB 导出) (标题):

    ID,SpellID,Reagent[0],Reagent[1..6]Reagent[7],ReagentCount[0],ReagentCount[1..6],ReagentCount[7]

    您还可以在此处查看完整的 -csv 数据文件,at my dropbox

  2. My gist from Github,它可以帮助您了解MongoImport 的工作原理。

我们需要什么:

我想接收这样的结构(模式)以将其导入MongoDB 集合:

ID(Number),SpellID(Number),Reagent(Array),ReagentCount(Array)
6,898,[878],[1]

使用 ID、SpellID 和两个数组,首先我们存储所有试剂 ID,例如来自所有 Reagent[n] 列的 [0,1,2,3,4,5,6,7],并在第二个数组中我们有一个长度相同的数组,代表 quantity 的 ReagentID,来自所有 ReagentCount[n]

具有这种结构的转置对象(模式):

ID(Number),SpellID(Number),ReagentID(Number),Quantity/Count(Number)
80,2675,1,2
80,2675,134,15
80,2675,14,45

如您所见,第一个示例和这个示例之间的区别在于,集合中的每个文档都代表每个ReagentID,其数量为SpellID。因此,如果一个Spell_IDN 不同的试剂,那么集合中将是N 文档,因为我们都知道,根据我们的Reagent_ID 不能超过7 个唯一的Reagent_ID -csv 文件。

node jsnpm i csv(或任何其他用于解析csv 文件的模块)的帮助下,我现在正在解决这个问题。只是为了让我的csv 文件可以通过mongoose 导入我的数据库。我将非常感谢所有可以为本案提供任何相关贡献的人。但无论如何,我最终会解决这个问题并在这个问题中分享我的解决方案。

至于第一个变体,我想 MongoImport 应该有一次性脚本,可以通过 -fields 将 Reagent[n]ReagentCount[n] 中的所有列连接到我上面提到的两个单独的数组,但不幸的是我没有知道它,并且没有关于 SO 或与其相关的官方 Mongo 文档的示例。因此,如果您对MongoImport 有足够的经验,请随时分享。

【问题讨论】:

    标签: javascript mongodb csv mongoose mongoimport


    【解决方案1】:

    最后我按照我的意愿解决了我的问题,但没有使用mongoimport

    我使用npm i csv 并编写函数来解析我的csv 文件。简而言之:

    async function FuncName (path) {
        try {
            let eva = fs.readFileSync(path,'utf8');
            csv.parse(eva, async function(err, data) {
                //console.log(data[0]); we receive headers, if they exist
                for (let i = 1; i < data.length; i++) { //we start from 1, because 0 is headers, if we don't have it, then we start from 0
                    console.log(data[i][34]); //where i is row number and  j(34) is a header address
                }
            });
        } catch (err) {
            console.log(err);
        }
    }
    

    它循环遍历csv 文件并在数组中显示数据,让您可以根据需要对它们进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-05
      • 2020-08-15
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多