2

Derby アプリで保存されていないデータを含む MongoDB コレクションがあります。それに対してクエリを実行し、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

唯一の問題は、ドキュメントにダービー ID がないことですそのため、MongoDB オブジェクト ID (_id) がダービー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

ありがとう

4

2 に答える 2

3

Racer クエリは 0.3.11 で更新されたばかりで、次の readme ファイルで説明されています: https://github.com/codeparty/racer/blob/master/lib/descriptor/query/README.md

于 2012-06-28T00:52:51.013 に答える
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 の配列を返します。[{id: "lskjfalksj23423"}]

注: この例はまだテストしていません。問題がある場合はお知らせください。いずれにせよ、クエリ システムがさらに構築されると、これは数か月で廃止されるはずです。

于 2012-05-01T07:24:28.720 に答える