2

我有一个 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) 位于对象的顶层,我会很高兴,这样我就可以查询它并设置模型引用。我现在构建了一个 hack 来绕过它,但它并不像我希望的那样顺利。代码如下:

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

另外,有什么方法可以更新模板而不破坏屏幕上已经存在的一些模板?而不是做一个完整的page.render只是做一个template.render

谢谢

4

2 回答 2

3

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

于 2012-06-28T00:52:51.013 回答
1

注意:这不再需要。查询系统已更新。请参阅内特的回答。

我与 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"}]

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

于 2012-05-01T07:24:28.720 回答