如何用 Epoch Time 替换 JavaScript 中的 ObjectId
how to replace ObjectId in JavaScript with Epoch Time
如何遍历 JSON 字符串并替换每个 ObjectId into Unix Epoch time 以进行进一步处理?
我所知道的:
您从 objectId 中获取前 8 个字符:
subStrObjectId = objectId.substring(0, 8);
5668d142a54cc4960b55ea19 --> 5668D142
并将这些从十六进制转换为 Int 值(以毫秒为单位的纪元时间):
subStrObjectIdInDec = parseInt(subStrObjectId, 16);
5668D142(十六进制)--> 1449709890(十进制)
我的 Json 字符串:
myJsonString = [
[
{"_id":"5668d142a54cc4960b55ea19","cid":10851045,"temp":25.4},
{"_id":"5668d14ea54cc4960b55ea1a","cid":10850909,"temp":24.9}
],
[
{"_id":"5668d14fa54cc4960b55ea1b","cid":10851045,"hum":37.9},
{"_id":"5668d3108c8cda92074b7ec9","cid":10850909,"hum":39.6}
],
[
{"_id":"5668d3198c8cda92074b7ecb","cid":10851045,"lux":34},
{"_id":"5668d31e8c8cda92074b7ecc","cid":10850909,"lux":68}
]
];
如果你把你知道的写成一个函数:
function convert(id) {
return parseInt(id.substring(0, 8), 16);
}
您可以轻松地遍历对象和 运行 对象上的函数。
我更喜欢函数式 javascript:
var data = myJsonString.map(function (array) {
return array.map(function (item) {
item.time = convert(item._id);
return item;
})
})
console.log(data);
但您也可以使用循环进行迭代:
for (var i=0;i<myJsonString.length;i++) {
for (var j=0;j<myJsonString[i].length;j++) {
myJsonString[i][j].time = convert(myJsonString[i][j]._id);
}
}
console.log(myJsonString);
您可以使用 getTimestamp()
to return the timestamp portion of the ObjectId()
作为日期。
myJsonString.map(
function(element) {
return element.map(function(doc) {
doc.timestamp = ObjectId(doc._id).getTimestamp();
doc._id = ObjectId(doc._id); // Only if you want to convert your _id string to valid Objectid
return doc;
})
}
);
产生:
[
[
{
"_id" : ObjectId("5668d14fa54cc4960b55ea1b"),
"cid" : 10851045,
"hum" : 37.9,
"timestamp" : ISODate("2015-12-10T01:11:43Z")
},
{
"_id" : ObjectId("5668d3108c8cda92074b7ec9"),
"cid" : 10850909,
"hum" : 39.6,
"timestamp" : ISODate("2015-12-10T01:19:12Z")
}
],
[
{
"_id" : ObjectId("5668d3198c8cda92074b7ecb"),
"cid" : 10851045,
"lux" : 34,
"timestamp" : ISODate("2015-12-10T01:19:21Z")
},
{
"_id" : ObjectId("5668d31e8c8cda92074b7ecc"),
"cid" : 10850909,
"lux" : 68,
"timestamp" : ISODate("2015-12-10T01:19:26Z")
}
]
]
如何遍历 JSON 字符串并替换每个 ObjectId into Unix Epoch time 以进行进一步处理?
我所知道的: 您从 objectId 中获取前 8 个字符:
subStrObjectId = objectId.substring(0, 8);
5668d142a54cc4960b55ea19 --> 5668D142
并将这些从十六进制转换为 Int 值(以毫秒为单位的纪元时间):
subStrObjectIdInDec = parseInt(subStrObjectId, 16);
5668D142(十六进制)--> 1449709890(十进制)
我的 Json 字符串:
myJsonString = [
[
{"_id":"5668d142a54cc4960b55ea19","cid":10851045,"temp":25.4},
{"_id":"5668d14ea54cc4960b55ea1a","cid":10850909,"temp":24.9}
],
[
{"_id":"5668d14fa54cc4960b55ea1b","cid":10851045,"hum":37.9},
{"_id":"5668d3108c8cda92074b7ec9","cid":10850909,"hum":39.6}
],
[
{"_id":"5668d3198c8cda92074b7ecb","cid":10851045,"lux":34},
{"_id":"5668d31e8c8cda92074b7ecc","cid":10850909,"lux":68}
]
];
如果你把你知道的写成一个函数:
function convert(id) {
return parseInt(id.substring(0, 8), 16);
}
您可以轻松地遍历对象和 运行 对象上的函数。
我更喜欢函数式 javascript:
var data = myJsonString.map(function (array) {
return array.map(function (item) {
item.time = convert(item._id);
return item;
})
})
console.log(data);
但您也可以使用循环进行迭代:
for (var i=0;i<myJsonString.length;i++) {
for (var j=0;j<myJsonString[i].length;j++) {
myJsonString[i][j].time = convert(myJsonString[i][j]._id);
}
}
console.log(myJsonString);
您可以使用 getTimestamp()
to return the timestamp portion of the ObjectId()
作为日期。
myJsonString.map(
function(element) {
return element.map(function(doc) {
doc.timestamp = ObjectId(doc._id).getTimestamp();
doc._id = ObjectId(doc._id); // Only if you want to convert your _id string to valid Objectid
return doc;
})
}
);
产生:
[
[
{
"_id" : ObjectId("5668d14fa54cc4960b55ea1b"),
"cid" : 10851045,
"hum" : 37.9,
"timestamp" : ISODate("2015-12-10T01:11:43Z")
},
{
"_id" : ObjectId("5668d3108c8cda92074b7ec9"),
"cid" : 10850909,
"hum" : 39.6,
"timestamp" : ISODate("2015-12-10T01:19:12Z")
}
],
[
{
"_id" : ObjectId("5668d3198c8cda92074b7ecb"),
"cid" : 10851045,
"lux" : 34,
"timestamp" : ISODate("2015-12-10T01:19:21Z")
},
{
"_id" : ObjectId("5668d31e8c8cda92074b7ecc"),
"cid" : 10850909,
"lux" : 68,
"timestamp" : ISODate("2015-12-10T01:19:26Z")
}
]
]