I am dealing with collections of documents in the 2500+ range. The code you suggested is similar to what I have already, but much cleaner. I'm assuming the lookup within the map is done in constant time?
Cheers,
Jeremy
On Thu, Oct 17, 2013 at 10:41 AM, Christian Grün christian.gruen@gmail.comwrote:
Hi Jeremy,
if the list is more or less arbitrary, then you’ll indeed have to browse all your documents in order to find the ones that are relevant you. One approach could be to specify a filtering predicate:
let $paths := ("a.xml", "b.xml") return db:open("db")[db:path(.) = $paths]
If this is too slow, string comparisons can be sped up by using a map, as recently proposed on this list:
let $paths := ("a.xml", "b.xml") let $map := map:new( $paths ! { . : true() }) return db:open("db")[$map(db:path(.))]
How many documents are stored in your database?
Best, Christian ___________________________
Yes, sorry I should have specified the criteria. I have a list of a
subset
of the documents in the database that need to be opened (I can store this list in any form necessary), but I am experiencing performance problems since I need to iterate over the list in order to filter or choose which documents to open.
Thanks,
Jeremy
On Thu, Oct 17, 2013 at 10:18 AM, Christian Grün <
christian.gruen@gmail.com>
wrote:
Hi Jeremy,
Is there a method to open a subset of documents (not distinguishable by path) in the
database
with performance similar to calling db:open($db_name)?
Is there any criteria regarding the documents you want to open? If you simply want to choose the first 10 documents, you could try a position filter:
collection("db")[position() = 1 to 10]
Talking about performance: fn:collection and db:open are based on the same code, so there shouldn’t be any difference.
Hope this helps, Christian