Couchdb view Queries - PullRequest
       4

Couchdb view Queries

2 голосов
/ 01 марта 2012

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

select * from personaccount where name="srini" and user="pup" order by lastloggedin

Я должен отправить имя и пользователя в качестве входных данных для представления, и данные должны быть отсортированы по lastloggedin.

Ниже приведено представление, которое я создал, но ононе работает

{
    "language": "javascript",
    "views": {
        "sortdatetimefunc": {
            "map": "function(doc) {
                emit({
                    lastloggedin: doc.lastloggedin,
                    name:         doc.name,
                    user:         doc.user
                },doc);
            }"
        }
    }
}

И эта команда curl iam использует:

http://uta:password@localhost:5984/personaccount/_design/checkdatesorting/_view/sortdatetimefunc?key={\"name:srini\",\"user:pup\"}

Мои вопросы

Поскольку сортировка будет выполнена по ключу, и я хочу, чтобы она была в lastloggedinпоэтому я дал это также в функции emit.

Но я передаю имя и пользователя только в качестве параметров.Нужно ли передавать все параметры, которые мы передаем в ключе?


Прежде всего, я хочу передать вам ответ, я сделал то же самое, и я получаю ошибки.Пожалуйста, помогите

Не могли бы вы попробовать это на своем ПК, я отправляю все команды:

curl -X PUT http://uta:password@localhost:5984/person-data

curl -X PUT http://uta:password@localhost:5984/person-data/srini -d '{"Name":"SRINI", "Idnum":"383896", "Format":"NTSC", "Studio":"Disney", "Year":"2009", "Rating":"PG", "lastTimeOfCall": "2012-02-08T19:44:37+0100"}'

curl -X PUT http://uta:password@localhost:5984/person-data/raju -d '{"Name":"RAJU", "Idnum":"456787", "Format":"FAT", "Studio":"VFX", "Year":"2010", "Rating":"PG", "lastTimeOfCall": "2012-02-08T19:50:37+0100"}'

curl -X PUT http://uta:password@localhost:5984/person-data/vihar -d '{"Name":"BALA", "Idnum":"567876", "Format":"FAT32", "Studio":"YELL", "Year":"2011", "Rating":"PG", "lastTimeOfCall": "2012-02-08T19:55:37+0100"}'

Вот вид, как вы сказали, я создал:

{
   "_id": "_design/persondestwo",
   "_rev": "1-0d3b4857b8e6c9e47cc9af771c433571",
   "language": "javascript",
   "views": {
       "personviewtwo": {
           "map": "function (doc) {\u000a    emit([ doc.Name, doc.Idnum, doc.lastTimeOfCall ], null);\u000a}"
       }
   }
}


I have fired this command from curl command :

curl -X GET http://uta:password@localhost:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"]&endkey=["SRINI","383896",{}]descending=true&include_docs=true

Я получил эту ошибку:

[4] 3000
curl: (3) [globbing] error: bad range specification after pos 99
[5] 1776
[6] 2736
[3]   Done                    descending=true
[4]   Done(3)                 curl -X GET http://uta:password@localhost:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"]
[5]   Done                    endkey=["SRINI","383896"]

Я не знаю, что это за ошибка.

Я также попытался передать параметры ниже, и это не помогает

curl -X GET http://uta:password@localhost:5984/person-data/_design/persondestwo/_view/personviewtwo?key={\"Name\":\"SRINI\",\"Idnum\": \"383896\"}&descending=true

Но я получаю разные ошибки в escape-последовательностях

В целом, я просто хочу, чтобы этот запрос был выполнен с помощью представления:

select * from person-data where Name="SRINI" and Idnum="383896" orderby lastTimeOfCall

Моя задача - как передать несколько параметров из curlкоманда, как я получаю много ошибок, если я делаю вышеописанным способом.

Ответы [ 2 ]

1 голос
/ 27 ноября 2013

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

curl -X GET http://uta:password@localhost:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"]&endkey=["SRINI","383896",{}]descending=true&include_docs=true

Символ & имеет специальное значение в командной строке и должен быть экранирован, когда является частью фактического параметра.Таким образом, вы должны поместить кавычки вокруг большого URL и избегать кавычек внутри него:

curl -X GET "http://uta:password@localhost:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=[\"SRINI\",\"383896\"]&endkey=[\"SRINI\",\"383896\",{}]descending=true&include_docs=true"
1 голос
/ 01 марта 2012

Прежде всего, вам нужно использовать массив в качестве ключа. Я бы использовал:

function (doc) {
    emit([ doc.name, doc.user, doc.lastLoggedIn ], null);
}

Это в основном выводит все документы в порядке их имени, затем пользователя, затем lastLoggedIn. Вы можете использовать следующий URL для запроса.

/_design/checkdatesorting/_view/sortdatetimefunc?startkey=["srini","pup"]&endkey=["srini","pup",{}]&include_docs=true

Во-вторых, обратите внимание, что я не вывел doc в качестве значения вашего запроса. Это занимает гораздо больше места на диске, особенно если ваши документы довольно большие. Просто используйте include_docs=true.

Наконец, обратитесь к CouchDB Wiki , это очень полезно.

...