1

我有一个查询,它动态确定一个集合名称和一个表达式来评估该集合,返回一个布尔值。说:

  • $my-collection指向集合,例如包含字符串/db/my/collection
  • 布尔表达式是exists(/foo/bar)

我可以exists(/foo/bar)在集合本身上运行,这将返回 true 或 false,具体取决于集合中的文档是否包含/foo/bar. 但是,如果事先不知道集合名称,我该怎么做呢?

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

那么,我应该怎么写呢?

4

1 回答 1

1

您可以将表达式重写为:

exists(collection($my-collection)/foo/bar)

或者这个——取决于 eXists 查询优化器——可能会表现得更好:

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

于 2012-02-16T20:06:32.560 回答