2015-08-02 2 views
1

Можно ли использовать дату в качестве ключа? Как я могу генерировать даты от определенной даты до текущей?Arango: генерировать последовательность дат

Мне нужно, чтобы получить структуру, как это:

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

...

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

ответ

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 атрибутов или диапазона выполнения запросов на нем, вы должны лучше использовать индекс skiplist на date:

db.dates.ensureUniqueSkiplist("date"); 

вместо

db.dates.ensureUniqueConstraint("date"); 
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 
Смежные вопросы