使用mongo脚本导入JSON

Sam*_*age 2 javascript json mongodb

我正在尝试编写mongo脚本jsonArrayJSON文件导入a 。我的脚本是.js格式文件,我load()mongo shell中使用命令执行它。有可能用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}});
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ett 8

这个问题还有另一个答案。即使有点老,我也要回应。

使用mongo shell可以做到这一点。

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

data.js

var myData=
[
        {
                "letter" : "A"
        },
        {
                "letter" : "B"
        },
        {
                "letter" : "C"
        }
]
Run Code Online (Sandbox Code Playgroud)

read.js

#!/usr/bin/mongo --quiet

// read data

load('data.js');

// display letters

for (i in myData) {
  var doc  = myData[i];
  print(doc.letter);
}
Run Code Online (Sandbox Code Playgroud)

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

write.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);
Run Code Online (Sandbox Code Playgroud)

shebang行(#!)将在Unix类型的操作系统(Linux或MacO)上运行,它们也应在Windows与Cygwin一起运行。


wdb*_*ley 1

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