nodes: 0, module; 1, function_definition; 2, function_name:query; 3, parameters; 4, block; 5, identifier:self; 6, dictionary_splat_pattern; 7, expression_statement; 8, return_statement; 9, identifier:query; 10, comment:"""
          Gets the results of query, with optional parameters sort, limit, skip, and fields.
  
          :param query: Optional parameters. Valid options are sort, limit, skip, and fields
          :type query: ``dict``
  
          :return: Array of documents retrieved by query.
          :rtype: ``array``
          """; 11, call; 12, attribute; 13, argument_list; 14, identifier:json; 15, identifier:loads; 16, call; 17, attribute; 18, argument_list; 19, call; 20, identifier:decode; 21, string; 22, attribute; 23, argument_list; 24, string_content:utf-8; 25, attribute; 26, identifier:read; 27, call; 28, identifier:body; 29, attribute; 30, argument_list; 31, identifier:self; 32, identifier:_get; 33, string; 34, dictionary_splat; 35, identifier:query
code: def query(self, **query):
          """
          Gets the results of query, with optional parameters sort, limit, skip, and fields.
  
          :param query: Optional parameters. Valid options are sort, limit, skip, and fields
          :type query: ``dict``
  
          :return: Array of documents retrieved by query.
          :rtype: ``array``
          """
          return json.loads(self._get('', **query).body.read().decode('utf-8'))