如何从JSON文件将日期插入mongo
How to insert date into mongo from JSON file
我有一个.json
文件,其中包含一个带日期的对象。如何确保此日期字段在mongo中作为"日期"数据类型插入?
我需要通过node.js.来完成
{
"name": "Jeff Johnson",
"email": "jeff@gmail.com",
"phone": "5555555555",
"date_added": "2014-01-22T14:56:59.301Z"
}
这一点的核心基本上是,您正在使用的JSON不会"保留"数据类型",从而确定"日期",实际上它只是表示为"字符串"。当然,另一方面,MongoDB本身实际上是"无计划的",因此"数据库"没有固有的信息可以说这个字段应该是一个日期。
考虑到这一点,有几种方法从您的"当前"实施到"未来"考虑各不相同。
无论您是在解析数据(而且有很多解析器实现),那么就由"您的"应用程序逻辑"知道"这个字段实际上是一个"日期",然后自己处理转换。因此,归结到文档级别:
var obj = JSON.parse(singleJSONDoc);
obj.date_added = new Date(obj.date_added);
这将是您将为输入中的每个有效JSON文档实现的代码的基础,前提是输入可以一次读取一行。对于"流解析器",相同的方法各不相同,然后向您提供要修改的基本对象,甚至一些库可能支持"钩子",以允许您自定义解析的对象。
作为另一种方法,逻辑可以内置到应用程序自己的"模式"概念中。这就是大多数ODM实现的工作方式(一个例子是mongoose),您可以在其中定义模式和数据的"类型"。然后根据您的实现为您进行翻译。
例如:(猫鼬风格):
var personSchema = new Schema({
"name": { "type": String },
"email": { "type": String },
"phone": { "type": String },
"date_added": { "type": Date, "default": Date.now }
});
var Person = mongoose.model( "Person", personSchema );
var raw = JSON.parse(singleJSONDoc);
var person = new Person(raw);
person.save(function(err,doc) {
// doc inserted here
})
因此,"逻辑"只是从代码中的一个位置移动到管理Schema和"类型"的"隔间"。转换是根据实现的"类型"为您完成的。例如,Mongoose可以开箱即用地执行Date
。存在其他解决方案,但这是基本前提。
最后,另一种方法是JSON表示本身。MongoDB不久前引入了一个称为"扩展json语法"的概念,这在EJSON项目中显然是"借鉴"来的。
这里的总体思想是"启用"JSON解析器,无论是序列化还是反序列化,都可以为您处理"类型"转换。因此,基本上,虽然JavaScript(和其他语言)有"类型"的概念,但JSON本身只是一种"字符串"格式。因此,这里有一些特殊的处理,以"序列化"形式"保留"该类型信息,这样它就可以在保留"类型"的情况下"反序列化"回来。
格式如下:
{
"name": "Jeff Johnson",
"email": "jeff@gmail.com",
"phone": "5555555555",
"date_added": { "$date": "2014-01-22T14:56:59.301Z" }
}
这通常由实现EJSON规范的解析器、mongoimport
和mongoexport
等其他工具以及一些本地驱动程序实现(Java、C#等)支持。
如果您可以将输入数据处理成这种格式,那么您只需使用解析器,不需要其他任何东西来处理转换。这里的好处是,您可以使用相同的解析器来"导出"信息,因此这在将JSON数据传递给客户端时非常有用,现在"客户端"也可以"感知"并正确处理类型转换。
所以简单的答案是,如果你不做一些工作,什么都做不了。MongoDB不包含模式,这取决于您的应用程序。智能"类型"转换不是基本JSON的一部分。使用其他库和代码来处理转换。
下面是一个例子。
{ "$date": "2018-11-10T22:26:12.111Z" }
这样
{
"createdAt": { "$date": "2018-11-10T22:26:12.111Z" }
}
您应该使用对象数据建模库,如mongoose.js,为您的数据提供严格的建模环境。示例:
var pet = new Schema({
animal: {
type : String,
enum : ['cat', 'dog', 'snake', 'hamster'],
require : true
},
age: {
type : Number,
enum : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
require : true
},
color: {
type: String
},
modified: {
type : Date,
default : Date.now
}
});
在将数据插入数据库之前,通过相应地转换dataTypes来准备数据。
1:将JSON解析为对象2:相应地更改值2.1:对于日期,您可以简单地执行:
some_object["date_added"] = new Date(some_object["date_added"]);
对于数字(整数),最好也这样存储;)
- 如何访问日期并将其插入数据库?节点.JS&MongoDB
- 将JSON插入MongoDB中,自动转换字符串中的日期
- 如何在数据库中插入日期
- 如何根据创建日期对对象进行排序,以插入Meteor的高图表
- 单击按钮可多次动态添加选择框、文本框和日期,并将这些值插入数据库
- 我想将插入的日期与laravel 5项目中的当前时间进行比较
- 日期选取器在字段中插入日期和星期
- 将日期插入数组
- 如何将今天的日期插入图像 URL
- 节点 mysql 插入当前日期
- 如何将今天的日期插入到 URL 中
- jQuery 日期选择器不适用于动态插入的 html 元素
- 在日历和日期搜索功能中插入值
- 如何从JSON文件将日期插入mongo
- 我需要将员工进出的日期和时间插入mysql数据库
- 在更改时,即使是动态插入的输入标记上的日期选择器的处理程序也不会;不起作用
- 如何在jquery向导中插入日期选择器
- 在mysqli查询中插入Javascript日期时间
- 转换任何日期插入到ISO格式没有时间戳在JavaScript
- 我想检索值插入特定日期使用mongodb的_id