Как получить доступ к документам CouchDB с помощью модели CouchRest

Пожалуйста, помогите мне решить эту проблему. В моей CouchDB около 1500 документов, каждый из которых относится к одному из типов (Обзор и Ответ).

Мне нужно решение для подписок

1] Необходимо отображать идентификаторы документов (_id) в раскрывающемся списке, в котором тип документа (documentType) указан как «Survey».

2] Если я выберу элемент (_id) из раскрывающегося списка, мне нужно отобразить все идентификаторы документов (_id) в поле списка, которое принадлежит выбранному идентификатору (_id выбран из раскрывающегося списка)

Всего у меня 1500 таких документов

{
   "_id": "ff2fb2554682ba613c2f83c63502808a",
   "_rev": "4-dd559696434a402739e789ccc8c9a481",
   "answers": [
       {
           "answers": [
               "Aug 19,2011"
           ],
           "questionId": "50f3df434ae02ac7fff48c1c2bde83e4"
       },
       {
           "answers": [
               "Bechu Yadav"
           ],
           "questionId": "15504f006e58872fd94871fe0c9d32ad"
       },
       {
           "answers": [
               "35"
           ],
           "questionId": "3c447a2f5cc6ca1985ce2c81463a3c47"
       },
       {
           "answers": [
               "Male"
           ],
           "questionId": "a6df7c25602939554612ef6de762f5b9"
       },
       {
           "questionId": "2f66155965e60094f23f01af531d5af1",
           "subAnswers": [
               {
                   "questionId": "1dae2d86eef846c967254c9e369170ce"
               },
               {
                   "questionId": "40ffeb4d33dab1fe8d2d8b73c02ed13b"
               },
               {
                   "questionId": "2db1e8b6e97d5baa8935b9b31fcc9648"
               },
               {
                   "questionId": "0f8bb9f91ea8085b4ffb839ee8deabb5"
               },
               {
                   "questionId": "22a93ecb72c50ff8899f8b2937776e51"
               },
               {
                   "questionId": "e5106384790c2be745c952c4b867a0ff"
               }
           ]

           "questionId": "492cf9bd41257ea478c5222fbba06616"
       }
   ],
   "createdAt": "2011-08-19T21:05:36.486+0000",
   "createdBy": "user4",
   "documentType": "Response",
   "ipAddress": "42.110.85.67",
    "location": {
       "latitude": 26.8415613,
       "longitude": 75.8222883,
       "provider": "network"
   },
    "surveyId": "6df022f0f371752167ad4920b38e1c37",
    "published": true
}

А моя модель CouchRest выглядит следующим образом

class Android < CouchRest::Model::Base
    property :description, String
    property :_id, String
    property :_rev, String
    property :documentType, String

    design do
      view :by_documentType,:map =>"function(doc){if (doc.documentType == 'Survey') {emit(doc._id);}}"
      view :by_createdBy
    end
 end

Но когда я открываю by_documentType, он возвращает nil

Android.find_by_documentType('Survey')

person Shreekumar S    schedule 21.12.2011    source источник


Ответы (2)


Спасибо, друзья!

Наконец я нашел ответ, я изменил свою модель следующим образом

require 'couchrest_model'

class Android < CouchRest::Model::Base

  property :description, String
  property :_id, String
  property :_rev, String
  property :documentType, String
  property :surveyId, String

  design do
    view :by_document_type,:map =>"function(doc) {if (doc.documentType == \"Survey\") {emit([doc._id,doc.title], 1);}}",:reduce=>"function(keys, values, rereduce) {return sum(values);}"
    view :by_surveyId,:map =>"function(doc) {emit([doc.surveyId], 1);}",:reduce=>"function(keys, values, rereduce) {return sum(values);}"
  end
end

И теперь можно вызывать это представление по мере необходимости. следующий возвращает все документы, которые имеют тип документа "Обзор"

Android.by_document_type.rows

И на основе выбора идентификатора опроса я могу получить все документы, которые принадлежат выбранному идентификатору опроса, как показано ниже.

Android.by_surveyId.key('Selected Survey ID goes here').rows
person Shreekumar S    schedule 09.02.2012

Попробуйте Android.by_documentType.key ('Survey')

person ghempton    schedule 27.12.2011
comment
Я пробовал, но он возвращает представление вместо результатов. Он возвращается вот так #<CouchRest::Model::Designs::View:0x5453a78 @owner=Android, @model=Android, @query={:key=>"Survey"}, @name="by_documentType"> - person Shreekumar S; 07.01.2012