2012-04-30 3 views
2

У меня есть коллекция MongoDB с данными, которые не были сохранены в моем приложении Derby. Я хочу запросить это и потянуть его в свое приложение Derby.Использование импортированных документов от MongoDB в DerbyJS

Итак, я понял, что, и вот код, чтобы сделать это:

get '/:year', (page, model, params) -> 
    query = model.query 'years', 
    where: 
     year: (parseInt params.year, 10) 
    limit: 1 
    model.subscribe query, (err, year) -> 
    if err 
     console.log err 

    page.render 
     y: year.get(), 
     year: params.year 

Единственная проблема заключается в том, что документы не имеют дерби идентификатор, поэтому он устанавливает ObjectID MongoDB (_id) до derby id. Вот пример JSON, который возвращает model.get(): https://gist.github.com/0a5426d2b28a940e8803

У меня нет возможности узнать, что представляет собой объект перед запросом. Мне бы очень понравилось, если последний вернувшийся id (currID) был на верхнем уровне объекта, поэтому я мог просто запросить его и установить ссылку на модель. На данный момент я создал хак, чтобы обойти его, но это не так гладко, как хотелось бы. Код приведен ниже:

getId = (obj, year) -> 
    for x of obj 
    return obj[x].id if obj[x].year is year 
    -1 

Также есть ли способ обновить шаблоны, не уничтожая некоторые шаблоны уже на экране? Вместо того, чтобы делать полный page.render, просто делая template.render?

Благодаря

ответ

1

ПРИМЕЧАНИЕ: Это больше не нужны. Система запросов обновлена. Пожалуйста, см. Ответ Нейта.

Я говорил с разработчиком DerbyJS (nateps), и он сказал мне, что они работают над улучшением системы запросов. Это все еще продолжается.

В настоящем время, я построил хак, который будет принимать объект, чтобы проверить против и объекта параметров

getId = (obj, params) -> 
    ids = [] 
    for x of obj 
    i = 0 
    for y of params 
     if obj[x][y] isnt params[y] 
     break 
     else if (++i is params.length) 
     ids.push 
      id: obj[x].id 
    return ids 

Например, вы можете ввести такой объект, как, например:

var obj = { 
    "lskjfalksj23423": { 
    id: "lskjfalksj23423", 
    name: "random day", 
    year: 2012, 
    month: 12, 
    day: 1 
    }, 
    "aklsdjflkasdfd": { 
    id: "aklsdjflkasdfd", 
    name: "random day 2", 
    year: 2012, 
    month: 8, 
    day: 1 
    } 
} 

, а затем объект для испытания против (не забудьте добавить длину ключа)

var params = { 
    month: 12, 
    day: 1, 
    length: 2 
} 

и возвращает массив соответствующих идентификаторов: [{id: "lskjfalksj23423"}]

Примечание: Я не тестировал этот пример, поэтому дайте мне знать, если у вас возникли проблемы с ним. Это должно быть устаревшим через несколько месяцев, когда система запросов будет построена дальше.

Смежные вопросы