Использование импортированных документов из 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"}]
Примечание: я не проверял пример, поэтому дайте мне знать, если у вас возникли проблемы с ним. В любом случае это должно быть устаревшим через несколько месяцев, когда система запросов будет построена дальше.