在DerbyJS中使用MongoDB中导入的文档

时间:2012-04-30 06:14:18

标签: javascript node.js 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 id,因此它将MongoDB objectid(_id)设置为 derby id。以下是model.get()返回的JSON示例:https://gist.github.com/0a5426d2b28a940e8803

在查询之前,我无法知道objectid是什么。我很乐意,如果最近返回的id(currID)位于对象的顶层,那么我可以查询并设置模型引用。我现在建立了一个黑客来解决它,但它并不像我希望的那样顺利。代码如下:

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

此外,有没有办法更新模板而不破坏屏幕上已有的模板?而不只是做page.render完整的template.render

由于

2 个答案:

答案 0 :(得分:3)

Racer查询刚刚在0.3.11中更新,并在本自述文件中进行了描述:https://github.com/codeparty/racer/blob/master/lib/descriptor/query/README.md

答案 1 :(得分:1)

注意:不再需要此功能。查询系统已更新。请参阅Nate的回答。

我与DerbyJS(nateps)的开发人员交谈,他告诉我他们正在努力改进查询系统。它仍在进行中。

现在,我已经构建了一个hack,它将对象和参数对象进行测试

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的数组:[{id: "lskjfalksj23423"}]

注意:我没有测试过这个例子,所以如果你遇到问题,请告诉我。无论如何,当查询系统进一步构建时,这应该在几个月内过时。