2016-10-20 9 views
0

Вот как я это делаю сейчас, есть ли лучший (более простой или простой) способ?Извлечение документов из облачного db, если они содержат значение в свойстве массива

Документы в Cloudant дб:

1 ..

{ 
    "_id": "someId", 
    "_rev": "someRev", 
    "title": "someTitle", 
    "parentDirectories": [ 
    '/', '/base_dir' 
    ] 
} 

2 ..

{ 
    "_id": "someId2", 
    "_rev": "someRev", 
    "title": "someTitle2", 
    "parentDirectories": [ 
    '/', '/base_dir' 
    ] 
} 

В настоящее время у меня это определено в viewCloudant и установить параметр include_docs истина так возвращается весь объект (это необходимо).

function (doc) { 
    if (doc.parentDirectories) { 
    for (i = 0; i < doc.parentDirectories.length; i++) { 
     emit(doc.parentDirectories[i], {_id: doc._id}); 
    } 
    } 
} 

И назовет view используя ..

/<database>/_design/<design-doc>/_view/my_view?include_docs=true 

Используя keys набор параметров: ['/'], поэтому вид возвращает 2 документа выше.

ответ

0

Ваше решение в порядке. Создание индекса, ключи которого являются ключами из вашего массива, - отличный способ получить документы, содержащие известное значение. Одна маленькая итерация испускает null в качестве значения, как вы извлекаете весь документ в запросе время в любом случае (с include_docs=true):

function (doc) { 
    if (doc.parentDirectories) { 
    for (i = 0; i < doc.parentDirectories.length; i++) { 
     emit(doc.parentDirectories[i], null); 
    } 
    } 
} 

Вы также могли бы испускать подмножество документа:

function (doc) { 
    if (doc.parentDirectories) { 
    for (i = 0; i < doc.parentDirectories.length; i++) { 
     emit(doc.parentDirectories[i], doc.title); 
    } 
    } 
} 

означает, что вы можете избежать использования include_docs = true для более быстрого ответа.

+0

Вы также можете испустить весь документ с помощью 'emit (doc.parentDirectories [i], doc)', если вам нужен весь документ, - намного быстрее, чем чтение документа с помощью 'include_docs = true', но при этом стоит стоимость размер индекса на диске. –

 Смежные вопросы

  • Нет связанных вопросов^_^