couchbase上不同属性的限制和排序
给定couchbase上的JSON文档,例如里程碑集合,类似于:couchbase上不同属性的限制和排序,couchbase,Couchbase,给定couchbase上的JSON文档,例如里程碑集合,类似于: { "milestoneDate" : /Date(1335191824495+0100)/, "companyId" : 43, "ownerUserId": 475, "participants" : [ { "userId": 2, "docId" : "132546" }, {
{
"milestoneDate" : /Date(1335191824495+0100)/,
"companyId" : 43,
"ownerUserId": 475,
"participants" : [
{
"userId": 2,
"docId" : "132546"
},
{
"userId": 67,
"docId" : "153"
}
]
}
function (doc, meta) {
if(doc.companyId && doc.milestoneDate)
{
//key made up of date particles + company id
var eventKey = dateToArray(new Date(parseInt(doc.milestoneDate.substr(6))));
eventKey.push(doc.companyId);
emit(eventKey, null);
}
}
"key":[2013,6,19,16,11,25,14]
如果我要选择公司的所有里程碑43
,并想先按最新日期订购。。我对couchbase的看法与此类似:
{
"milestoneDate" : /Date(1335191824495+0100)/,
"companyId" : 43,
"ownerUserId": 475,
"participants" : [
{
"userId": 2,
"docId" : "132546"
},
{
"userId": 67,
"docId" : "153"
}
]
}
function (doc, meta) {
if(doc.companyId && doc.milestoneDate)
{
//key made up of date particles + company id
var eventKey = dateToArray(new Date(parseInt(doc.milestoneDate.substr(6))));
eventKey.push(doc.companyId);
emit(eventKey, null);
}
}
"key":[2013,6,19,16,11,25,14]
我确实在rest URL上获得了日期和公司Id。。但是,由于对couchbase非常陌生,我无法解决如何将视图限制为仅返回公司的里程碑43
返回键与此类似:
{
"milestoneDate" : /Date(1335191824495+0100)/,
"companyId" : 43,
"ownerUserId": 475,
"participants" : [
{
"userId": 2,
"docId" : "132546"
},
{
"userId": 67,
"docId" : "153"
}
]
}
function (doc, meta) {
if(doc.companyId && doc.milestoneDate)
{
//key made up of date particles + company id
var eventKey = dateToArray(new Date(parseInt(doc.milestoneDate.substr(6))));
eventKey.push(doc.companyId);
emit(eventKey, null);
}
}
"key":[2013,6,19,16,11,25,14]
其中最后一个元素(14
)是公司id。。这显然是错误的
我尝试过的查询参数有:
&descending=true&startkey=[{},43]
&descending=true&startkey=[{},43]&endKey=[{},43]
- 尝试将companyId添加到
值中,但无法按值限制返回结果
谢谢。将公司id放在数组的开头,因为您将受到公司id的限制,couchbase将按公司id排序,然后按日期数组排序,因此您将只能获得一家公司的里程碑文档 我将修改视图以发射
emit([doc.copmanyId, eventKey], null);
然后,您可以使用
&descending=true&startkey=[43,{}]
这就是以前对我有用的东西
我回去试了试,这似乎很有效-根据需要限制和命令:
&descending=true&startkey=[43,{}]&endkey=[42,{}]
或
使用结束键指定下一个递增/递减值(基于降序标志),或使用与开始键相同的endkey
并将inclusiveEnd
设置为true
这两种选择都应该很好。(我只测试了
endkey=42的那一个
,但它们应该都能工作)这也是在43之后返回其他公司ID。。所以,如果ID43公司有3个里程碑,而我要求的是5个,那么最后两个是42个里程碑中的一个;这对我来说已经足够好了,因为我只是在做一些应用程序日志转储,它总是有足够的事件。。虽然我应该在应用程序层上添加一个检查来过滤掉它们或其他东西。。我将返回并尝试一下,看看是否可以将其限制为一个组。可能这些链接将帮助您:“&descending=true&startkey=[43,{}]&endkey=[43,{}]&inclusive_end=true”现在对3.0版不起作用,只要开始键和结束键相同,查询就不会返回任何内容。你知道这是否已经改变了吗?@SumitJain我们的couchbase有很多问题;修理一个坏掉的东西。所以我们把它从堆栈中删除了。。并用elasticsearch取代它-从那时起,我们就没有任何问题了。。不幸的是,(或幸运的是),从那时起我就没有看过couchbase了!