2017-05-26 10 views
0

データを含むJSONファイルがあります。日付情報を追加して、このJSONファイルの内容をmongoDBに挿入します。mongodbのjsonファイルから日付オブジェクトを挿入

[ 
    { 
     "installationTime": "How do I insert a date Object here?", 
     "someOtherValues": 0, 
     ... 
    }, 
    ... 
] 

そしてNode.jsの中に挿入:JSONファイルは次のようなものになります

const content = await readFileAsync('pathToJSONfile.json'); 
// readFileAsync is fs.readFile wrapped in a promise 
await db.createCollection('testCollection'); 
await db.collection('testCollection').insert(JSON.parse(content)); 

を私の質問は:私はJSONファイルにISODate("2016-12-18T18:30:00Z")などのDateオブジェクトを挿入するにはどうすればよいですか?

"installationTime": { "$date": "2016-12-18T18:30:00Z" }

をしかし、私はMongoDBのkey $date must not start with '$'からエラーを取得:彼女はこのフォーラムでは、私が見つかりました。

私のアプローチは、ノードドライバからのjsonファイルとinsertコマンドでも可能ですか?私は今、このようにそれを解決した

+0

JSON自体には「型」がありません。そのため、すべてのデータは文字列か数値になります。 「フォーラムで」と読んだのは、[MongoDB Extended JSON](https://docs.mongodb.com/manual/reference/mongodb-extended-json/)の構文です。今では、そのようなフォーマットの日付を受け入れる独自の '.parse()'メソッドを実装する "いくつかの"ライブラリが存在します。代わりに 'mongoimport'を代わりに使うこともできます。これはその形式をサポートしています。あるいは、単純なISOStringを使用して、それらの文字列を自分自身の 'Date'オブジェクトとして置き換える(" parse ")か、コレクション内に存在するenmasseを更新してください。 –

+0

私は推奨事項を書いていませんが、[MongoDB Extended JSON](https://www.google.com/search?q=mongodb+extended+json)を検索した場合、トップの結果は公式のマニュアルページですまもなく、アプリケーションで使用するのに興味のあるものが見つかるかもしれません。 –

答えて

0

:ノードモジュールchild_processの

インポート...シェルコマンドを実行するために

import { exec } from 'child_process';

...。 そしてmongoimportとJSONファイルの挿入:

exec('mongoimport --jsonArray --db tstdb --collection testCollection --file pathToJSONfile.json', (error) => { 
    if (error) { 
    console.log(`exec error: ${error}`); 
    } 
}); 

そして、JSONファイル内$dateキーは日付オブジェクトをインポートするために使用することができます。

"installationTime": { "$date": "2017-10-01T00:00:00.000Z" }, 

は今の日付であること、()ショーを見つけますISODateオブジェクトとして格納されます。

> db.getCollection("feed_in_payments").find() 
{ "_id" : ObjectId("592bd66cb3395ba514bc1005"), "installationTime" : ISODate("2000-01-01T00:00:00Z"), ... 
関連する問題