Как выполнить поиск по шаблону в векторе строк, используя запрос селектора - PullRequest
0 голосов
/ 02 января 2019

Существуют различные документы, состоящие из следующей структуры:

 1."dev": {
    "urls": ["https://text.com/00a51073"]
  }

 2. "dev": {
            "urls": ["https://text.com/410578c1","https://text.com/00a51073"]
          }

Как выполнить поиск по шаблону, чтобы при поиске «00a51073» возвращались оба вышеуказанных документа?

{
   "selector": {
      "$and": [
         {
            "$or": [
               {
                  "dev": {
                     "urls": {
                        "$regex": ".*00a51073"
                     }
                  }
               }
            ]
         }
      ]
   }
}

1 Ответ

0 голосов
/ 03 января 2019

А как насчет использования ванильного отображения карты вместо уменьшения? Просто используйте последний бит каждого URL в качестве ключа, и вы можете получить все документы в виде запроса диапазона. Карта может выглядеть как

function(doc) {
    if (doc && doc.dev && doc.dev.urls) {
        doc.dev.urls.forEach(function(url) {
            var data = url.split("/");
            emit(data[data.len-1], 1);
        });
    }
}

и тогда вы можете запросить что-то вроде

curl 'https://...cloudant.com/DB/_design/DD/_view/by_url?startkey="00a51073"&endkey="00a51073."&include_docs=true'
...