我正在尝试将JSON文件导入到节点内的MongoDB中。这是我想要做的:
db.open(function(err, db) {
if(!err) {
db.collection('orgs', {safe: true}, function(err, collection) {
if (err) {
console.log("The 'orgs' collection doesn't exist. Creating it with sample data...");
db.collection('orgs', function(err, collection) {
orgs = require("../data/orgs.json");
collection.insert(orgs, {safe:true}, function(err, result) {});
});
}
});
}
});
请注意,NodeJS可以自动导入JSON作为JSON,这很好,但JSON不处理ISODate或ObjectID等对象。以下是我要导入的JSON数据的信息:
./数据/ orgs.json:
{
"stub": "apple",
"name":"Apple, Inc.",
"timezone": "America/New_York",
"currency": "USD",
"plans": [
{"planId":1, "dtStart": {"$date":"2012-12-07 12:34:56"}},
{"planId":0, "dtStart": {"$date":"2012-12-05 23:45:02"}, "dtEnd": {"$date":"2012-12-07 12:34:56"}}
]
}
我正在使用Node的mongodb本机驱动程序。
我尝试使用日期的整数表示,但它不起作用。
有没有办法在JSON中表示MongoDB会识别的ISODate和ObjectID字段?
答案 0 :(得分:1)
您无法在JSON
中存储日期和其他自定义对象,因为仅支持字符串,数字,布尔值和null
。因此,要从JSON
加载它们,您将以某种方式从它们的字符串表示中恢复它们。当然,您可以使用BSON
代替JSON
,因为它支持所有这些数据类型,但有更好的方法可以解决您的问题。
由于您已经使用require
而不是JSON.parse
来加载和解析您的JSON数据,因此您可以再做一步并使用JavaScript
表示您的数据,而不是纯{{1} }}:
JSON
在这种情况下,您将能够使用var ObjectID = require('mongodb').ObjectID;
module.exports = {
stub: "apple",
name: "Apple, Inc.",
timezone: "America/New_York",
currency: "USD",
plans: [
{
planId: new ObjectID("1"),
dtStart: new Date("2012-12-07 12:34:56")
},
{
planId: new ObjectID("0"),
dtStart: new Date("2012-12-05 23:45:02"),
dtEnd: new Date("2012-12-07 12:34:56")
}
]
}
和new Date
来创建日期和对象ID。
N.B。您可以使用new ObjectID
代替require('bson').ObjectID
,结果将是相同的。
答案 1 :(得分:0)
我们使用类似的东西:
import ejson from 'mongodb-extended-json';
import animals from './fixtures/Animals.json';
const array = ejson.deserialize(animals)
json就像
{ "_id" : { "$oid" : "54ebb..." }, "created" : { "$date" : "2015-02-23T23:19:54.674+0000" }}