从mongodb中的json文件插入日期对象

时间:2017-05-26 09:28:59

标签: json node.js mongodb

我有一个带有一些数据的JSON文件,想要添加日期信息,然后在mongoDB中插入这个JSON文件的内容。 JSON文件看起来像这样:

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

并在node.js中插入:

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

我的问题是:如何将ISODate("2016-12-18T18:30:00Z")之类的日期对象插入JSON文件?她在这个论坛上发现:

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

但是我从mongoDB key $date must not start with '$'得到了一个错误。

我的方法是否可以使用json文件和来自节点驱动程序的insert命令?

1 个答案:

答案 0 :(得分:1)

我现在已经解决了这个问题:

导入节点模块child_process ...

import { exec } from 'child_process';

...为了执行shell命令。 并使用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" },

现在find()显示日期存储为ISODate对象:

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