Доступ к студенческой базе данных - CouchDB

Я хочу создать базу данных студентов, в которой есть подробная информация о студентах - идентификатор, имя, адрес, стенограмма, телефон и т. д. Я создал такую ​​структуру:

{
 "ssn" : "121-23-1232", 
 "name": "Grace Johnson",
 "address": [
    {"Street Address": "190 Pinehill place", 
    "City": "Belmont",
    "State": "CA",
    "ZipCode": "08250"
    }
    ],
 "phone": "605-123-1111",
 "transcript": [
    {"Math":"B",
    "English":"A",
    "Physics": "B",
    "Psychology": "C",
    "Physical Education": "A"
    }
    ]
 }

Однако является ли этот метод создания правильным, если я хочу иметь доступ к студентам, которые живут в определенном городе.. Как бы я написал это? Также предположим, что я хочу, чтобы все студенты, получившие пятерку по физике...

Ваша помощь очень ценится.


person user3323595    schedule 20.02.2014    source источник


Ответы (1)


Если вы хотите вывести всех студентов, живущих в определенном городе, ваша функция карты может выглядеть так:

function(doc){
  if(doc.address){
    emit([doc.address.city, doc.address.state], doc.name)
  }
}

Это объединит всех студентов, живущих в городе. Таким образом, вы можете выполнить этот запрос GET, чтобы найти студентов, которые живут в определенном городе:

GET /<viewUrl?start_key=[Belmont,CA]

Карта оценок будет аналогична:

function(doc){
  if(doc.transcript){
    for(var i = 0; i < doc.transcript.length; i++){
      var classes = Object.keys(doc.transcript[i]);
      for(var j = 0; j < classes.length; j++){
        var class = classes[j];
        emit([class, doc.transcript[j][class]], doc.name)
      }
    }
  }
}

Карта будет отображать все классы для учащегося и их оценки. Итак, он запрашивает его, вы можете сделать:

GET /<viewUrl>?key=[Physics,A]
person TheDude    schedule 20.02.2014
comment
Не могли бы вы рассказать мне, почему, когда я запускаю первую функцию, которую вы написали, я получаю [null,null] для ключа. Похоже, он ничего не возвращает для doc.address.city или doc.address.state. - person user3323595; 21.02.2014
comment
Я хочу, чтобы все студенты, получившие пятерку по физике. В решении, которое вы мне дали, мы проверяли условие, что doc.transcript.Physics='A' ? Не могли бы вы дать мне знать, как это написать. Можно ли включить его в качестве условия if в функцию (doc). Спасибо за вашу помощь. - person user3323595; 21.02.2014
comment
Я добавил запрос GET, который вы можете сделать, чтобы получить всех студентов, получивших пятерку по физике, указав Дивану, какой ключ вам нужен. - person TheDude; 21.02.2014
comment
Извините, что звучу так невежественно, но это первая неделя, которую я работаю в Couchdb, и мне нужно выполнить задание. Где мне написать команду GET, если я использую Futon. - person user3323595; 21.02.2014
comment
Не волнуйтесь! Я не думаю, что вы можете указать параметры запроса в Futon, но вы можете щелкнуть серую стрелку в правом углу панели навигации на странице просмотра — она приведет вас к URL-адресу для этого просмотра, и вы можете добавить параметры в адресной строке. - person TheDude; 21.02.2014
comment
Поскольку это задание, я предлагаю посмотреть руководство по CouchDb на их веб-сайте, чтобы лучше понять, как использовать представления: wiki.apache.org/couchdb/Introduction_to_CouchDB_views - person TheDude; 21.02.2014
comment
Спасибо за ваше время. Я перейду к этому и покопаюсь еще немного. Ценю твою помощь. - person user3323595; 21.02.2014
comment
Не могли бы вы объяснить, почему я получаю эту ошибку при попытке выполнить GET с помощью CURL: curl -X GET localhost:5984/students/_design/abc/_view/ curl: (3) [подстановка] ошибка: неверная спецификация диапазона после поз. 71 - person user3323595; 21.02.2014
comment
На самом деле переходя к чему-то еще более фундаментальному. Почему эта функция дает мне нулевое значение: function(doc) { if (doc.address) {emit ([doc.address.City); }} - person user3323595; 21.02.2014
comment
Синтаксис неверен. Должно быть function(doc) { if (doc.address) {emit ([doc.address.City], 1); }} - person TheDude; 21.02.2014
comment
Это дало мне значение I по сравнению со столбцом значений. я хочу, чтобы название города исходило от адреса. Можете ли вы подтвердить, что способ, которым я создал сам документ, даст мне информацию? - person user3323595; 21.02.2014