2

任意のフィールドに特定の文字列を含むすべてのドキュメントを返すクエリを実行したいと考えています。たとえば、「users」テーブルがあり、「john」を含むすべてのドキュメントを探しているとします。返される結果は次のようになります。

[{"first_name": "jhon", "last_name": "watson"}, {"first_name": "elton", "last_name": "john"}, {"first_name": "sherlock", "last_name": "holmes", "best_friend": "john watson"}]

rethinkdb でそれを行うにはどうすればよいですか? JavaScriptの回答で十分です。Pythonの実装の方が優れています。

4

3 に答える 3

2

ドキュメント全体を文字列に強制してから、それを検索できるようです。

r.db('database').table('table).filter(function(doc) {
  return doc.coerceTo('string').match('querystring');
});

このソリューションは、他のソリューションほど滑らかではありませんが、私にとってははるかに高速に実行され、これまでと同じ結果が得られます。

于 2015-05-11T14:10:04.857 に答える
0

ここで JavaScript でこれを理解しようとしていることに気付いた人にとって、これは大まかに次のように変換されます。

function values(doc) {
  return doc.keys().map(function(key) {
    return doc(key);
  });
}

function contains(doc, string) {
  return values(doc).map(function(val) {
    return r.branch(val.match(string), true, false);
  }).reduce(function(left, right) {
    return left.or(right);
  });
}

var query = r.db('database').table('table').filter(function(doc) {
  return contains(doc, "some string");
});

query.run().then(function(results) {
  console.log(results);
});

改善歓迎!

于 2015-05-07T23:33:22.050 に答える