Сложные запросы в CouchDB для нескольких типов документов - PullRequest
0 голосов
/ 13 июня 2019

Я относительно новичок в CouchDB (точнее, в Cloudant, если это имеет значение), и мне трудно что-то обдумывать.

Допустим следующие (упрощенные) примеры документов:

{ "docType": "school", "_id": "school1", "state": "CA" }
{ "docType": "teacher", "_id": "teacher1", "age": "40", "school": "school1" }

Я хочу найти всех учителей в возрасте $ (например, 40) в состоянии $ state (например, CA).

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Представления рассматривают только один документ одновременно;то есть запросы не могут напрямую объединять данные из разных документов.Вы можете выполнять запросы к нескольким полям в одном документе, используя Cloudant Query.Вы можете написать селектор прямо на панели управления Cloudant.Что-то вроде

"selector": {
  "age": {
    "$gte": 40
  },
  "state": {
    "$eq": "CA"
  }
}

См. https://cloud.ibm.com/docs/services/Cloudant/tutorials?topic=cloudant-creating-an-ibm-cloudant-query

с полной ссылкой здесь: https://cloud.ibm.com/docs/services/Cloudant/tutorials?topic=cloudant-query

Вы также можете использовать так называемый связанный документ для эмуляции основных объединений, как указано в документах CouchDB https://docs.couchdb.org/en/stable/ddocs/views/joins.html

0 голосов
/ 20 июля 2019

Я также новичок в Cloudant и NoSQL в целом и ранее работал только с реляционными базами данных.Насколько я понимаю, документы в NoSQL эквивалентны строкам в реляционной базе данных (за исключением того, что столбцы могут быть разными).Я думаю, что в вашем примере вы думаете о документах как о таблицах.

База данных NoSQL похожа на реляционную базу данных с одной таблицей.Если вы хотите сделать перекрестные ссылки на ваши данные, база данных NoSQL не является хорошим выбором.Вы можете поместить информацию о школе в документ учителя, который создаст много дублирующих данных.Если вы хотите нормализованные данные, лучше использовать реляционную базу данных.

Я новичок в этой теме, не стесняйтесь редактировать или удалять мое сообщение, если оно неправильное или бесполезное.

...