Xquery 在eXist中,如何在动态确定的集合上运行表达式?

Xquery 在eXist中,如何在动态确定的集合上运行表达式?,xquery,exist-db,Xquery,Exist Db,我有一个查询,它动态地确定一个集合名称和一个表达式,以对返回布尔值的集合求值。说: $my collection指向集合,例如包含字符串/db/my/collection 布尔表达式是存在(/foo/bar) 我可以在集合本身上运行exists(/foo/bar),它将返回true或false,具体取决于集合中的文档是否包含/foo/bar。但是,如果事先不知道集合名称,我怎么能这样做呢 我天真地尝试了collection($mycollection)/exists(/foo/bar)。但是

我有一个查询,它动态地确定一个集合名称和一个表达式,以对返回布尔值的集合求值。说:

  • $my collection
    指向集合,例如包含字符串
    /db/my/collection
  • 布尔表达式是
    存在(/foo/bar)
我可以在集合本身上运行
exists(/foo/bar)
,它将返回true或false,具体取决于集合中的文档是否包含
/foo/bar
。但是,如果事先不知道集合名称,我怎么能这样做呢

我天真地尝试了
collection($mycollection)/exists(/foo/bar)
。但是由于返回集合中的文档节点,因此这将返回集合中文档的数量,而不是一个布尔值。这不是我想要的,而且它可能非常慢,因为我的收藏可能包含数万个文档


那么,我应该怎么写呢?

您可以将表达式改写为:

exists(collection($my-collection)/foo/bar)
或者,根据现有的查询优化器,这可能会执行得更好:

exists((collection($my-collection)/foo/bar)[1])

您可以将表达式改写为:

exists(collection($my-collection)/foo/bar)
或者,根据现有的查询优化器,这可能会执行得更好:

exists((collection($my-collection)/foo/bar)[1])