9

一意のキー「id」を持つ「人」データのテーブルがあります。クライアントからサーバーに JSON 配列として送信するデータを取得する ID のリストがあります。サーバーはそのデータを JSON 配列として受け取ります。

これらの ID ごとにドキュメントを取得するクエリを実行する方法はありますか?

または、自分でIDを解析して結果の配列を作成し、その配列を送り返す唯一のオプションです。

今まで使ってみた...

  • getAll - しかし、動的な量のパラメーターを受け入れるため、これを機能させることができず、値の配列を動的な量のパラメーターに変更する方法がわかりません。

    (例... 以下のようなことができるようになりたいのですが、できません)

    r.db('vp').table('user').getAll(["0", "0", "99"])
    

    これしかできない…

    r.db('vp').table('user').getAll("0", "0", "99")
    
  • expr と forEach - 以下に示すように、これはうまくいかないと思います。

    var arr = [];
    r.expr(["0", "0", "99"]).forEach(function(id) {
    
    })
    
4

4 に答える 4

7

簡潔な答え:

r.expr([id1, id2, id3]).eqJoin(function(doc) { return doc; }, r.table("person"))

より長い答え:

これを行うにはいくつかの方法があります。上記は、私が標準的な方法と呼ぶものです。何が起こっているのかを分析しましょう:

まずr.expr([id1, id2, id3])、アレイをパッケージ化してサーバーに送信します。

次にeqJoin、値のストリームを取得し、ディスパッチしgetてそれぞれにインデックスを付けます。マッピング関数が必要なため、これfunction(doc) { return doc; }はやや醜いハックです。eqJoin

したがって、最終的に上記のコードは次と同等になります。

[r.table("person").get(id1), r.table("person").get(id2), r.table("person).get(id3)]
于 2013-12-03T11:01:24.747 に答える