2012-03-01 58 views
2

请帮我创建一个视图。下面是要求Couchdb查看查询

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:[email protected]:5984/personaccount/_design/checkdatesorting/_view/sortdatetimefunc?key={\"name:srini\",\"user:pup\"} 

我的问题是

如排序将完成关键,我希望它在lastloggedin,所以我已经给出了在发射功能。

但iam只传递名称和用户作为参数。我们是否需要传递我们在密钥中给出的所有参数?


首先,我想传达给你的答复,我做了同样的,我得到错误。请帮助

能否请您试试这个您的PC上,IAM张贴的所有命令:

curl -X PUT http://uta:[email protected]:5984/person-data 

curl -X PUT http://uta:[email protected]: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:[email protected]: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:[email protected]: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:[email protected]: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:[email protected]:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"] 
[5] Done     endkey=["SRINI","383896"] 

我不知道这个错误是什么。

我也试图传递的参数如下方式,它并没有帮助

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

但我对转义序列

总的来说,我只是想通过视图来满足这个查询得到不同的错误:

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

我关心的是如何将多个参数从curl命令传递,我得到很多的错误,如果我做了以上途径。

回答

1

首先,您需要使用数组作为您的密钥。我会用:

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,这很有帮助。

+0

你好多米尼克,所有我想传达感谢您的答复:首先,我也做了同样的和我得到的错误 – user1242003 2012-03-02 05:50:21

1

我只是偶然发现了这个问题。你所得到的错误是由不逃避这个命令造成的:

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

的&角色对命令行有特殊的意义,应该逃脱当实际参数的一部分。 所以你应该把引号的大网址,并逃避引号里面:

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