在 CouchDB 映射函数中发出日期时 - 在日期对象上调用什么?
When emitting a date in a CouchDB Map function - what is being called on the date object?
我正在尝试将 Date 对象作为 map 函数中的键发出,但无法理解 Date 对象未正确解析时发生的情况。
使用一个简单的示例记录集:
{
"_id": "e3681a4f5ce5685b777659804e9fd9f1",
"date": "2016-04-04T16:02:09.058+01:00" // okay datestring
}
{
"_id": "99a5c50967a279e1d7fef1a4ed18d7fb",
"date": "2016-04-34T16:02:09.058+01:00" // invalid datestring
}
{
"_id": "43a435ce71a4b92ab0dd4fe9d91fbbb2",
"date": "text" // invalid datestring
}
以及以下地图函数:
function(doc) {
var date = new Date(doc.date);
emit(date,1);
}
给出以下结果集:
{"total_rows":3,"offset":0,"rows":[
{"id":"43a435ce71a4b92ab0dd4fe9d91fbbb2","key":null,"value":1},
{"id":"99a5c50967a279e1d7fef1a4ed18d7fb","key":null,"value":1},
{"id":"e3681a4f5ce5685b777659804e9fd9f1","key":"2016-04-04T15:02:09.058Z","value":1}
]}
键的空值来自哪里?它不会像 return "Invalid Date"
那样在日期上调用 toString()
或 toISOString()
这是怎么回事?
基本上,它是这样工作的:
function emit(key, value) {
var row = { id: currentDocId(), key: key, value: value };
appendToOutput(JSON.stringify(row));
}
鉴于 toJSON()
在无效日期 returns null
.
,因此应该很容易看出这些值的来源
实际上根本不是 emit()
函数执行此操作,而是在未提供 list function 时使用的默认渲染实现。
while (row = getRow()) {
send(JSON.stringify(row))
}
我正在尝试将 Date 对象作为 map 函数中的键发出,但无法理解 Date 对象未正确解析时发生的情况。
使用一个简单的示例记录集:
{
"_id": "e3681a4f5ce5685b777659804e9fd9f1",
"date": "2016-04-04T16:02:09.058+01:00" // okay datestring
}
{
"_id": "99a5c50967a279e1d7fef1a4ed18d7fb",
"date": "2016-04-34T16:02:09.058+01:00" // invalid datestring
}
{
"_id": "43a435ce71a4b92ab0dd4fe9d91fbbb2",
"date": "text" // invalid datestring
}
以及以下地图函数:
function(doc) {
var date = new Date(doc.date);
emit(date,1);
}
给出以下结果集:
{"total_rows":3,"offset":0,"rows":[
{"id":"43a435ce71a4b92ab0dd4fe9d91fbbb2","key":null,"value":1},
{"id":"99a5c50967a279e1d7fef1a4ed18d7fb","key":null,"value":1},
{"id":"e3681a4f5ce5685b777659804e9fd9f1","key":"2016-04-04T15:02:09.058Z","value":1}
]}
键的空值来自哪里?它不会像 return "Invalid Date"
toString()
或 toISOString()
这是怎么回事?
基本上,它是这样工作的:
function emit(key, value) {
var row = { id: currentDocId(), key: key, value: value };
appendToOutput(JSON.stringify(row));
}
鉴于 toJSON()
在无效日期 returns null
.
实际上根本不是 emit()
函数执行此操作,而是在未提供 list function 时使用的默认渲染实现。
while (row = getRow()) {
send(JSON.stringify(row))
}