我有一个查询,它动态地确定一个集合名称和一个表达式,以便在该集合上评估返回一个布尔值。说:
$my-collection
指向该集合,例如包含字符串/db/my/collection
。exists(/foo/bar)
。我可以在集合本身上运行exists(/foo/bar)
,它将返回true或false,具体取决于集合中的文档是否包含/foo/bar
。但是,如果事先不知道集合名称,我怎么能这样做呢?
天真地,我试过collection($my-collection)/exists(/foo/bar)
。但是由于collection()
返回集合中的文档节点,这将返回与集合中的文档一样多的布尔值,而不是仅返回一个布尔值。这不是我想要的,而且它可能非常慢,因为我的集合可以包含数万个文档。
那么,我应该怎么写呢?
答案 0 :(得分:1)
您可以将表达式重写为:
exists(collection($my-collection)/foo/bar)
或许这个,取决于eXists查询优化器,可能表现更好:
exists((collection($my-collection)/foo/bar)[1])
HTH!