2016-05-24 10 views
1

私はrethinkdbにこのような文書をたくさん持っています。配列内のクエリ

[ 
    { 
     "complete": false, 
     "blobs": [ 
      { 
       "base64": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
       "fingerprint": "123", 
       "data": { 
        "meta1": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Serial Number": 123456, 
        "hash": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
        "meta2": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Info:": { 
         "length": 1024 
        }, 
        "Validity": { 
         "begin": "202808Z", 
         "end": "19960129000000Z" 
        }, 
        "Version": 0, 
        "item count:": 0 
       } 
      }, 
      { 
       "base64": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
       "fingerprint": "456", 
       "data": { 
        "meta1": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Serial Number": 123456, 
        "hash": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
        "meta2": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Info:": { 
         "length": 1024 
        }, 
        "Validity": { 
         "begin": "202808Z", 
         "end": "19960129000000Z" 
        }, 
        "Version": 0, 
        "item count:": 0 
       } 
      }, 
      { 
       "base64": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
       "fingerprint": "789", 
       "data": { 
        "meta1": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Serial Number": 123456, 
        "hash": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
        "meta2": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Info:": { 
         "length": 1024 
        }, 
        "Validity": { 
         "begin": "202808Z", 
         "end": "19960129000000Z" 
        }, 
        "Version": 0, 
        "item count:": 0 
       } 
      }, 
      { 
       "base64": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
       "fingerprint": "101112", 
       "data": { 
        "meta1": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Serial Number": 123456, 
        "hash": "MIICPDCCAaUCEHC65B0Q2Sk0tjjKe", 
        "meta2": { 
         "a": "abc", 
         "b": "bcd", 
         "c": "cdf" 
        }, 
        "Info:": { 
         "length": 1024 
        }, 
        "Validity": { 
         "begin": "202808Z", 
         "end": "19960129000000Z" 
        }, 
        "Version": 0, 
        "item count:": 0 
       } 
      } 
     ], 
     "port": 443, 
     "items": [ 
      { 
       "blobs": [ 
        "123", 
        "457", 
        "789", 
        "10112" 
       ]} 
     ], 
     "secure": true, 
     "fast": true 
    } 
] 

各ドキュメントには複数の「ブロブ」が含まれています。私は、すべてのドキュメントのすべてのブロブを照会し、フィンガープリントに一致する「ブロブ」を返す必要があります。私はこれがどのように見えるべきかを理解するのに苦労しています。

私はこのクエリを試しましたが、すべてのドキュメントを返します。

r.db('db').table('data').filter(r.row('blobs').contains(function(product) { 
return product('fingerprint').eq('742c3192e607e424eb4549542be1bbc53e6174e2'); 
})) 

答えて

0

これは必要な操作ですか?

table.concatMap(function(row) { return row('blobs'); }).filter(function(blob) { 
    return blob('fingerprint').eq('742c3192e607e424eb4549542be1bbc53e6174e2'); 
}) 
+0

はい、ありがとうと思います。しかし、これ(https://github.com/rethinkdb/rethinkdb/issues/5793)は私が 'concatMap'を必要としないことを示唆しており、' pathspecs'が簡単であることを示唆しているので、もう少し混乱しています。与えられた 'pathspec'の例はうまくいきません。 – user1513388

+0

1つの入力行から複数​​の出力行が必要な場合は、常にそのための 'concatMap'が必要です。 – mlucy