使用 mongo 脚本导入 JSON

Import JSON with mongo script

本文关键字:JSON 导入 脚本 mongo 使用      更新时间:2023-09-26

我正在尝试编写一个mongo脚本来从JSON文件导入jsonArray。我的脚本是.js格式,我在 mongo shell 中使用load()命令执行它。可以用mongo script来做吗?

我知道我可以用mongoimport代替。但是我想知道一种用脚本来做到这一点的方法。

下面给出了我当前缺少导入部分的脚本的内容。.

var db = connect("localhost:27017/fypgui");
//Import json to "crimes" collection here 
var crimes = db.crimes.find();
while (crimes.hasNext()){
    var item = crimes.next();
    var year =(item.crime_date != null)?(new Date(item.crime_date)).getFullYear():null;
    db.crimes.update( {_id: item._id}, {$set: {crime_year: year}});
}

这个问题还有另一个答案。 即使它有点旧,我也会回应。

可以使用 mongo 外壳来做到这一点。

您可以将 JSON 转换为有效的 JavaScript,方法是在它前面加上 var myData=然后使用 load() 命令加载 JavaScript。 在 load() 之后,您将能够通过 myData 对象从 mongo 脚本中访问您的数据。

数据.js

var myData=
[
        {
                "letter" : "A"
        },
        {
                "letter" : "B"
        },
        {
                "letter" : "C"
        }
]

阅读.js

#!/usr/bin/mongo --quiet
// read data
load('data.js');
// display letters
for (i in myData) {
  var doc  = myData[i];
  print(doc.letter);
}

对于编写 JSON 来说,最简单的方法是将结果加载到单个对象中。 在开头使用 var result={} 初始化对象,然后在末尾使用 printjson() 进行输出。 使用标准重定向将数据输出到文件。

写.js

#!/usr/bin/mongo --quiet
var result=[];
// read data from collection etc...
for (var i=65; i<91; i++) {
  result.push({letter: String.fromCharCode(i)});
}
// output
print("var myData=");
printjson(result);

shebang line(#!)可以在Unix类型的操作系统(Linux或MacOS)上运行,他们也应该在Windows上使用Cygwin。

可以使用 mongo shell 中未记录的cat()函数将文件内容作为文本获取:

var text = cat(filename);

如果您有兴趣,cat()和其他未记录的实用程序(如writeFile)在此文件中定义:shell_utils_extended.cpp

有了文件的内容,你可以根据需要修改它,或者直接把它传递给JSON.parse来获取JavaScript对象:

jsObj = JSON.parse(text);

但要小心:不幸的是,JSON.parse在 JSON 解析能力的意义上并不等同于mongoimport工具。

mongoimport能够以规范格式解析Mongo的扩展JSON。(例如,规范格式文件由bsondumpmongodump创建。有关 JSON 格式的更多信息,请参阅 MongoDB 扩展 JSON)。

JSON.parse不支持规范的 JSON 格式。它将读取规范格式输入并返回 JavaScript 对象,但以规范格式 JSON 存在的扩展数据类型信息将被忽略。

不,mongo shell 没有像成熟的编程环境那样从文件中读取和写入的能力。使用 mongoimport,或者用带有官方驱动程序的语言编写脚本。Node.js的语法非常接近mongo shell,尽管Node.js是一个异步/事件驱动的编程环境。Python/PyMongo将是类似的,如果你不想处理使用回调的结构逻辑,那么很容易学习。

嘿,

我知道这无关紧要,但是,每次我需要将一些 json 导入我的 mongo db 时,我都会做一些害羞的复制、粘贴和运行,直到我受够了!!如果你遭受同样的痛苦,我v写了一个小批量脚本来为我做这件事。心满意足?

https://github.com/aminjellali/batch/blob/master/mongoImporter.bat

@echo off
title = Mongo Data Base importing tool
goto :main
:import_collection
    echo importing %~2
    set file_name=%~2
    set removed_json=%file_name:.json=%
    mongoimport --db %~1 --collection %removed_json% --file %~2
goto :eof
:loop_over_files_in_current_dir
    for /f %%c in ('dir /b *.json') do call :import_collection %~1 %%c
goto :eof
:main
    IF [%1]==[] (
    ECHO FATAL ERROR: Please specify a data base name
    goto :eof
    ) ELSE (
    ECHO @author amin.jellali
    ECHO @email a.j.amin.jellali@gmail.com
    echo starting import...
    call :loop_over_files_in_current_dir %~1
    echo import done...
    echo hope you enjoyed me
    )
goto :eof