Arango:生成日期序列

时间:2015-08-02 11:19:47

标签: date sequence arangodb

是否可以使用日期作为密钥? 如何生成从特定日期到当前日期的日期?

我需要得到这样的结构:

date: "2009-01-01",
processing-status: "1"
data: "MyData"

...

date: "2015-07-29",
processing-status: "0"
data: "MyData2"

2 个答案:

答案 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