0

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

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

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

请在这方面需要帮助。

4

2 回答 2

2

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

如果您在某个时间范围内查询您的视图(您有startkey,并且endkey上一个问题doc.time中的参数不同)只能在客户端/应用程序端通过 doc.node 进行排序。如果您想在 couchbase 方面进行排序 - 尝试更改您的数据模型。

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

于 2013-07-15T13:00:58.137 回答
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 函数中,我将字符串创建日期转换为数字时间,然后将其作为键发出,按创建日期对结果进行排序。

于 2015-03-27T23:17:18.070 回答