2016-05-24 8 views
1

Ich habe eine Reihe von Dokumenten in meinem rethinkdb die wie folgt aussehen.Abfragen innerhalb Arrays

[ 
    { 
     "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 
    } 
] 

Jedes Dokument enthält mehrere "Blobs". Ich brauche alle Blobs in alle Dokumente abzufragen und geben die „Blob“, die den Fingerabdruck übereinstimmt. Ich kämpfe um herauszufinden, wie das aussehen soll.

habe ich versucht, diese Abfrage aber gibt alle Dokumente.

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

Antwort

0

Macht das, was Sie wollen?

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

Ja, ich denke, es tut, danke. Im jedoch ein wenig mehr verwirrt jetzt, da diese (https://github.com/rethinkdb/rethinkdb/issues/5793) schlage ich nicht brauchen die 'concatMap' und schlägt vor, dass' pathspecs' sind viel einfacher. Das angegebene 'pathspec'-Beispiel funktioniert jedoch nicht. – user1513388

+0

Wenn Sie mehrere Ausgabezeilen aus einer einzigen Eingabezeile möchten, müssen Sie immer 'concatMap' dafür. – mlucy