code: function matchExists (storage, testTables, document) {
    const keys = Object.keys(document);
  
    // Declaring "j" inside the "for" statement downgrades
    // performances by a factor of 3 to 4
    // Should be fixed in later V8 versions
    // (tested on Node 6.9.x)
    let i; // NOSONAR
  
    for (i = 0; i < keys.length; i++) {
      const key = keys[i];
  
      if (storage.fields[key]) {
        testTables.addMatch(storage.fields[key].subfilters);
  
        if (Array.isArray(document[key])) {
          let j;
          for (j = 0; j < document[key].length; j++) {
            const entry = storage.fields[key].values.get(document[key][j]);
  
            if (entry) {
              testTables.addMatch(entry);
            }
          }
        }
      }
    }
  }
docs: Updates the matched filters according to the provided data
  O(min(n,m)) with n the number of document keys and m the number of fields to test
  
  @param {object} storage - content of all conditions to be tested
  @param {object} testTables - test tables to update when a filter matches the document
  @param {object} document