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