В eXist, как я могу запустить выражение в динамически определенной коллекции? - PullRequest
1 голос
/ 16 февраля 2012

У меня есть запрос, который динамически определяет имя коллекции и выражение для оценки в этой коллекции, которое возвращает логическое значение.Скажем:

  • $my-collection указывает на коллекцию, например, содержит строку /db/my/collection.
  • Логическое выражение: exists(/foo/bar).

Я могу запустить exists(/foo/bar) на самой коллекции, которая будет возвращать либо true, либо false, в зависимости от того, содержит ли документ в коллекции /foo/bar.Но как я могу сделать то же самое, если название коллекции заранее неизвестно?

Наивно я пытался collection($my-collection)/exists(/foo/bar).Но так как collection() возвращает узлы документов в коллекции, то будет возвращено столько логических значений, сколько документов в коллекции, вместо одного логического значения.Это не то, чего я хочу, плюс оно может быть очень медленным, поскольку моя коллекция может содержать несколько десятков тысяч документов.

Итак, как мне написать это вместо этого?

1 Ответ

1 голос
/ 17 февраля 2012

Вы можете переписать ваше выражение так:

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

Или, возможно, это, которое - в зависимости от оптимизатора запросов eXists - может работать лучше:

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

НТН!

...