marklogic использовать node.js клиент API-документ запроса с подэлементом - PullRequest
0 голосов
/ 26 сентября 2018

Я использую marklogic 9 с Node.js Client Api.Когда я пытаюсь использовать queryBuilder для поиска в моей документации, я нахожу некоторые проблемы.

это мои данные документа

company: {
  uuid : uuid,
  name : comapnyName,
  parentCompany: {
    uuid: uuid,
    name: parentCompanyName,
  }
}

Я хочу найти всю компанию ниже материнской компании, но не включать материнскую компанию.Я использую

db.documents.query(
  this.qb.where(
    this.qb.directory('/company/'),
    this.qb.collection('company'),
    this.qb.word('name',parentCompanyName),
  )
).result();

этот запрос найти все компании, включая материнскую компанию.Я думаю, что найти company.name и company.parentCompany.name.

Как я могу использовать BuilderQuery, чтобы найти документ с company.parentCompany.name?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Один из подходов состоит в том, чтобы указать область действия для запроса:

db.documents.query(
  qb.where(
    qb.directory('/company/'),
    qb.collection('company'),
    qb.scope('parentCompany', qb.word('name',parentCompanyName))
  )
).result();

Этот запрос соответствует свойству name в любом месте свойства parentCompany.Такие запросы эквивалентны функции cts.jsonPropertyScopeQuery() в серверном JavaScript.Для получения дополнительной информации о функции построителя запросов области см .:

http://docs.marklogic.com/jsdoc/queryBuilder.html#scope

Альтернатива индекса диапазона пути указывает явный путь вместо отношения области.Если отношения объема недостаточно для устранения ложных срабатываний, это правильный путь.Как отмечает Вагнер, обязательным условием является дополнительный индекс.Запрос будет выглядеть следующим образом:

db.documents.query(
  qb.where(
    qb.directory('/company/'),
    qb.collection('company'),
    qb.word(qb.pathIndex('company/parentCompany/name'),parentCompanyName)
  )
).result();

Для получения дополнительной информации о функции построителя запросов pathIndex см .:

http://docs.marklogic.com/jsdoc/queryBuilder.html#pathIndex

Надеюсь, что поможет,

0 голосов
/ 26 сентября 2018

Вы можете добавить индекс диапазона пути на name и запросить с помощью pathRangeQuery , чтобы получить ваши документы.Ваш индекс диапазона пути будет выглядеть примерно так:

  • скалярный тип: строка
  • выражение пути: company / parentCompany / name

Вы можете добавитьИндекс диапазона пути в интерфейсе администратора в базе данных / your-db / Индексы диапазона пути.

После добавления индекса этот xquery должен получить ваши документы:

cts:search(fn:doc(), 
  cts:and-query((
    cts:path-range-query("company/parentCompany/name", "=", "Company name")
  ))
)

Извините, что не имеюПример кода javscript, но я еще не использовал api nodejs.

...