Javascript couchbase在node.js中按日期缩减
我必须编写一些代码,用couchbase、node.js过滤活动用户 我有一些用户文档,我查看了以下代码: 我创建了一个名为“bydate”的视图,代码如下:Javascript couchbase在node.js中按日期缩减,javascript,node.js,mapreduce,couchbase,Javascript,Node.js,Mapreduce,Couchbase,我必须编写一些代码,用couchbase、node.js过滤活动用户 我有一些用户文档,我查看了以下代码: 我创建了一个名为“bydate”的视图,代码如下: function (doc, meta) { if(meta.type == 'json') { if(doc.type == 'user') { if (doc.lastUpdate){ emit(dateToArray(doc.lastUpdate
function (doc, meta) {
if(meta.type == 'json') {
if(doc.type == 'user') {
if (doc.lastUpdate){
emit(dateToArray(doc.lastUpdate),doc.name); }
}
}
}
我必须使用couchbase控制台中的“group_level”设置按天、月或年进行过滤,但是我无法在node.js端正确过滤
这是我的node.js代码
router.get("/activetodaycount",
function(request,response,next)
{
var couchbase = require('couchbase');
var ViewQuery = couchbase.ViewQuery;
var params =
{
'reduce' : true
, 'group_level' : 3
, 'connection_timeout' : 600000
, 'limit' : 10
, 'skip' : 0
, 'stale' : false
, 'inclusive_end' : false
};
var query = ViewQuery.from('users', 'bydate')
couch.query(query, params, function(error, data)
{
if (error)
{
return next(error);
}
console.log(data)
var out = [];
for( var i = 0;i<data.length; i++ )
{
console.log(data[i])
var user = data[i].id;
out.push(user)
}
response.json({'cnt':out.length});
});
}
我不明白为什么我没有把dateToArray结果作为密钥。有什么想法吗
编辑:
以下是couchbase控制台中筛选结果的输出:
Key Value
[2015,1,2,13,56,0]
user:0af1144d-a23b-4098-9079-13dea8eb24b1 null
[2015,1,2,13,56,0]
user:58bc2ca5-9c50-4a5f-a056-e2a7b32450fd null
[2015,1,2,16,43,57]
user:6b5f1c46-bf1d-43d6-bf25-b3f1a2495cdf null
我怀疑您使用的是node SDK的2.0.3(最新)版本,它忽略了传递给
query
函数的params
对象,因为它需要ViewQuery
对象本身指定选项
试试这个:
var couchbase = require('couchbase');
var ViewQuery = couchbase.ViewQuery;
var cluster = new couchbase.Cluster('localhost');
var bucket = cluster.openBucket('default', console.log);
var query = ViewQuery.from('users', 'bydate')
.group_level(6)
.stale(ViewQuery.Update.BEFORE)
.limit(10)
.range([2015,1,2,13,56,0], [2015,1,2,16,43,57], true);
bucket.query(query, console.log);
请注意,
range
方法采用start键、end键和inclusive end布尔标志。请使用Couchbase控制台中的“group_level”设置提供一个视图输出示例。一般来说,我更希望我的服务器位于web服务层之后,而不是直接向客户端公开。巨大的安全漏洞。@这不是最终的实现,我只是在学习couchbase的工作原理。但你是对的。
var couchbase = require('couchbase');
var ViewQuery = couchbase.ViewQuery;
var cluster = new couchbase.Cluster('localhost');
var bucket = cluster.openBucket('default', console.log);
var query = ViewQuery.from('users', 'bydate')
.group_level(6)
.stale(ViewQuery.Update.BEFORE)
.limit(10)
.range([2015,1,2,13,56,0], [2015,1,2,16,43,57], true);
bucket.query(query, console.log);