是否可以使用日期作为密钥? 如何生成从特定日期到当前日期的日期?
我需要得到这样的结构:
date: "2009-01-01",
processing-status: "1"
data: "MyData"
...
date: "2015-07-29",
processing-status: "0"
data: "MyData2"
答案 0 :(得分:2)
我不清楚问题是什么,但我会尝试。
首先,您需要在date
属性上设置一个具有唯一索引的集合:
var db = require("org/arangodb").db;
db._create("dates");
db.dates.ensureUniqueConstraint("date");
之后,您可以使用如下生成器序列插入日期:
// current date
var now = new Date("2015-08-03 23:59:59Z");
// start date
var start = new Date("2015-07-23Z");
var dt = start;
// loop until we have reached the end date
while (dt.getTime() <= now.getTime()) {
// insert document into collection using date from sequence
db.dates.insert({ date: dt.toISOString().substr(0, 10) });
dt = new Date(dt.getTime() + 86400 * 1000);
};
请注意,唯一约束将创建哈希索引。这将确保集合中date
属性值的唯一性,但不支持排序。如果您需要按date
属性排序或对其运行范围查询,则应该在date
上使用跳转列表索引:
db.dates.ensureUniqueSkiplist("date");
而不是
db.dates.ensureUniqueConstraint("date");
答案 1 :(得分:0)
您可以使用AQL创建每个都有日期属性的文档,范围介于开始日期和结束日期之间:
LET ms_per_day = 1000 * 60 * 60 * 24
LET date_start = DATE_TIMESTAMP(2014, 12, 24)
LET date_end = DATE_TIMESTAMP(2014, 12, 31) // or DATE_NOW()
LET date_diff_in_days = (date_end - date_start) / ms_per_day
FOR val IN 0..date_diff_in_days
LET date = SUBSTRING(DATE_ISO8601(val * ms_per_day + date_start), 0, 10)
INSERT {
"date": date,
"processing-status": val % 3,
"data": CONCAT("My Data ", val % 3 + 1)
} INTO demo
RETURN UNSET(NEW, "_rev", "_key") # debug output