gpt4 book ai didi

javascript - 有没有一种方法可以用 MongoDB 识别的 JSON 来表示 ISODate 和 ObjectID 字段?

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:16 26 4
gpt4 key购买 nike

我正在尝试将 JSON 文件导入到 Node 内部的 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 数据的片段:

./data/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 native 驱动程序。

我尝试使用日期的整数表示,但它不起作用。

有没有一种方法可以用 MongoDB 识别的 JSON 来表示 ISODate 和 ObjectID 字段?

最佳答案

您无法在 JSON 中存储日期和其他自定义对象,因为它仅支持字符串、数字、 bool 值和 null。因此,要从 JSON 加载它们,您应该以某种方式从它们的字符串表示形式恢复它们。当然,您可以使用 BSON 代替 JSON,因为它支持所有这些数据类型,但有更好的方法来解决您的问题。

由于您已经使用 require 而不是 JSON.parse 来加载和解析 JSON 数据,因此您可以再执行一步,使用 JavaScript 表示您的数据,而不是纯 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 Datenew ObjectID 创建日期和对象 ID。

注意您可以使用 require('bson').ObjectID 代替 require('mongodb').ObjectID,结果是相同的。

关于javascript - 有没有一种方法可以用 MongoDB 识别的 JSON 来表示 ISODate 和 ObjectID 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com