Использование импортированных документов из MongoDB в DerbyJS

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

Итак, я понял это и вот код для этого:

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

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

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

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

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

Спасибо

2 ответа

Решение

Запросы Racer были только что обновлены в 0.3.11 и описаны в этом файле readme: https://github.com/codeparty/racer/blob/master/lib/descriptor/query/README.md

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

Я говорил с разработчиком 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"}]

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

Другие вопросы по тегам