如何在Couchbase中的特定列上对数据进行排序?

时间:2013-07-15 11:49:50

标签: java couchbase

嗨,我是沙发基地的新手。我有一个如下的观点:

function (doc, meta) {
  if(doc.docType == "DeviceData")
  emit([doc.group, doc.time], [doc.node, doc.node_gps_lat, doc.node_gps_long]);
}

所以我想得到按doc.node值排序的结果。我搜索了文档,但找不到合适的解决方案。

请提供帮助。

2 个答案:

答案 0 :(得分:2)

Couchbase按键排序结果。因此,在您的示例中,结果将首先按doc.group排序,然后按doc.time排序。如果您想按doc.node对结果进行排序,则应将该字段包含在客户端/应用端的密钥或排序结果中。

如果您在某个时间范围内查看视图(startkeyendkeydoc.time param不同,请按照previous question的顺序排序。节点只能在客户端/应用程序端。如果你想在couchbase方面进行排序 - 尝试更改你的数据模型。

这是一个解释在couchbase中排序的doc。这里是doc,解释了基数如何对视图结果进行排序。

答案 1 :(得分:0)

我想我正在添加m03geek上面所说的内容,为了按特定列(CB中的值)排序,您需要将该值作为键传递回去。我正在使用CB构建Django应用程序,我想按创建日期排序,因此我创建了以下视图映射函数。



function (doc, meta) {
	if (doc.type && doc.type == "snapshot" && doc.published == "yes" && doc.section == "sports") {
		var arrDate = doc.create_date.split("-");
          	var newDate = new Date(arrDate[2], arrDate[0], arrDate[1]);
          	var numTime = newDate.getTime();
          	doc.time = numTime;
          	emit(doc.time, null);
	}
}




在上面的map函数中,我将字符串创建日期转换为数字时间,然后将其作为按创建日期对结果进行排序的键发出。