2014-12-27 88 views
1

我想寫一個mongo腳本JSON文件導入jsonArray。我的腳本是.js格式,我用load()命令執行mongo shell。是否可以用mongo script做到這一點?用mongo腳本導入JSON

我知道我可以用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}}); 
} 

回答

1

沒有,蒙戈外殼沒有從文件中像fully-讀寫能力成熟的編程環境。使用mongoimport,或使用官方驅動程序以一種語言編寫腳本。儘管Node.js是一個異步/事件驅動的編程環境,但Node.js的語法與mongo shell非常接近。如果您不想處理使用回調的邏輯結構,Python/PyMongo將會類似且易於學習。

2

還有另一個這個問題的答案。即使有點老,我會迴應。

可以用mongo shell做到這一點。

您可以將您的JSON轉換爲有效的JavaScript前綴爲var myData=,然後使用load()命令加載JavaScript。在load()之後,您將能夠通過myData對象從您的mongo腳本中訪問您的數據。

data.js

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

read.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()輸出。使用標準重定向將數據輸出到文件。

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); 

的家當行(#!)在Unix類型的操作系統(Linux或Mac系統),他們也應該在Windows上使用Cygwin上工作會工作。