Mapreduce 如何在in Couchbase中按值对“视图”的结果进行排序?
根据我在Couchbase的理解,我们可以使用Mapreduce 如何在in Couchbase中按值对“视图”的结果进行排序?,mapreduce,couchdb,couchbase,nosql-aggregation,Mapreduce,Couchdb,Couchbase,Nosql Aggregation,根据我在Couchbase的理解,我们可以使用 descending=true 但在我的例子中,我想改为按值排序。考虑JSON格式的推特数据,我的问题是用户最喜欢提到的是什么? < /P> 每条推文的结构如下: { "text": "", "entities" : { "hashtags" : [ ... ], "user_mentions" : [ ...], "urls" : [ ... ] } 因此,在重用Map函数之前,
descending=true
但在我的例子中,我想改为按值排序。考虑JSON格式的推特数据,我的问题是<强>用户最喜欢提到的是什么?<强> < /P>
每条推文的结构如下:
{
"text": "",
"entities" : {
"hashtags" : [ ... ],
"user_mentions" : [ ...],
"urls" : [ ... ]
}
因此,在重用Map函数之前,我使用了MongoDB,并对其进行了轻微修改,使其在Couchbase中可用,如下所示:
function (doc, meta) {
if (!doc.entities) { return; }
doc.entities.user_mentions.forEach(
function(mention) {
if (mention.screen_name !== undefined) {
emit(mention.screen_name, null);
}
}
)
}
然后我使用reduce函数\u count
统计所有屏幕名称
出现的次数。现在我的问题是如何按照计数值而不是键进行排序?
谢谢简而言之,您不能按查看结果的值排序。只能按键排序 一些解决办法是:
- 在将数据插入Couchbase之前分析数据,并为您感兴趣的值创建计数器(在您的案例中提到)
- 如果视图的大小可用于客户端排序,请使用您必须根据应用程序大小排序的视图
var http=require('http');
变量选项={
主持人:“127.0.0.1”,
港口:8092,
路径:'/social/\u design/dev\u tags/\u view/tags?full\u set=true&connection\u timeout=60000&group=true',
方法:“获取”
}
http.request(
选项,
功能(res){
var buf=新缓冲区(0);
res.on('数据'),函数(数据){
buf+=数据;
});
res.on('end',function(){
var tweets=JSON.parse(buf);
var rows=tweets.rows;
sort(函数(a,b){返回b.value-a.value}
);
对于(变量i=0;i<10;i++){
console.log(行[i]);
}
});
}
).end();
同时,我正在寻找其他选项来实现这一点我通过使用复合键解决了这个问题
function (doc, meta) {
emit([doc.constraint,doc.yoursortvalue]);
}
url元素:
&startkey=["jim",5]&endkey=["jim",10]&descending=true
嗯,我很不愿意接受这个答案,虽然我知道“你不能按值排序”,但我认为这是一个最终会被couchbase开发者解决的问题,所以为了这个问题的长久性…@chutsu,我给出的答案是couchbase 2.0(你是对的,未来产品Couchbase可能会提供实现这一点的方法)Pavel的问题在Couchbase view中是一个经典问题,这就是为什么我想澄清的原因。“Pavel的问题是一个经典问题”,你是指我的问题吗?:我使用的是2.2,但仍然是同一个问题,有人解决了这个问题吗?
&startkey=["jim",5]&endkey=["jim",10]&descending=true