<div dir="ltr">Hi all,<div>I'm working on a plugin to search on Files and Folders by a metadata field (the "type" field). The important parts of the code I have so far are:</div><div><br></div><div><div><font face="monospace, monospace">class ResourceExt(Resource):</font></div><div><font face="monospace, monospace">    @access.public</font></div><div><font face="monospace, monospace">    @describeRoute(...)</font></div><div><font face="monospace, monospace">    def typeSearch(self, params):</font></div><div><font face="monospace, monospace">        self.requireParams(('type'), params)</font></div><div><font face="monospace, monospace">        limit, offset, sort = self.getPagingParameters(params, 'name')</font></div><div><font face="monospace, monospace">        asset_type = params['type']</font></div><div><font face="monospace, monospace">        query = {"meta.type": asset_type}</font></div><div><font face="monospace, monospace">        fields = ['_id', 'name', 'description', 'folderId', 'public', 'access']</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">        model = ModelImporter().model('item')</font></div><div><font face="monospace, monospace">        cursor = model.find(query, fields=fields)<br></font></div><div><font face="monospace, monospace">        return list(model.filterResultsByPermission(</font></div><div><font face="monospace, monospace">            cursor, user=self.getCurrentUser(), level=AccessType.READ,</font></div><div><font face="monospace, monospace">            limit=limit, offset=offset, removeKeys=('public', 'access')))</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">def load(info):</font></div><div><font face="monospace, monospace">    ModelImporter.model('item').ensureIndex(['meta.type', {'sparse': True}])</font></div><div><font face="monospace, monospace">    ext = ResourceExt()</font></div><div><font face="monospace, monospace">    info['apiRoot'].resource.route('GET', ('type_search',), ext.typeSearch)</font></div></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">now this seems to be working ok with files, but fails to return folders, so I think I have a wrong idea of what an item model is. I originally thought that an item was an abstraction of both files and folders, and that querying the item model was the way to query for both of them. I then checked the items mongo collection and it seems there is an item record for each file record, but none for the folder entries. So this brings up a couple of questions:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">1. What is the relationship between items, files and folders? What are the concrete use cases for items? [1]</font></div><div><font face="arial, helvetica, sans-serif">2. Is there a way to perform metadata-based queries on both files and folders? I know I can do two queries (one on files and one on folders) but then I would have to manually merge them and handle all the limit/offset math, which seems unnecessarily complicated.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">[1] I did check the class comments and I'm a bit confused about those too. E.g. in Item it says "</font><span style="font-family:arial,helvetica,sans-serif">Items are leaves in the data hierarchy. They can contain 0 or more </span><span style="font-family:arial,helvetica,sans-serif">files within them ...", which is confusing as I would expect leaves to be files instead of containing them. Also if items can contain files, doesn't that mean they are (or act as) folders?</span></div><div><span style="font-family:arial,helvetica,sans-serif"><br></span></div><div><span style="font-family:arial,helvetica,sans-serif">Thanks in advance!</span></div><div><span style="font-family:arial,helvetica,sans-serif">Andy</span></div></div>