Couchbase View _count Reduce For Given Keys

时间:2015-03-31 21:38:56

标签: mapreduce couchbase reduce

我正在尝试使用诸如_count之类的reduce在Couchbase中编写一个视图,它会给我一个地址上的产品计数。

我在数据库中有以下格式的一些文档;

文件1

{
    id: 1,
    address: {
        street: 'W Churchill St'
        city: 'Chicago',
        state: 'IL',
    },
    product: 'Cable'
}

文件2

{
    id: 2,
    address: {
        street: 'W Churchill St'
        city: 'Chicago',
        state: 'IL',
    },
    product: 'Cable'
}

文件3

{
    id: 3,
    address: {
        street: 'W Churchill St'
        city: 'Chicago',
        state: 'IL',
    },
    product: 'Satellite'
}

文件4

{
    id: 4,
    address: {
        street: 'E Foster Rd'
        city: 'New York',
        state: 'NY',
    },
    product: 'Free To Air'
}

我已经有了一个视图,它给了我一个使用复合键的地址的所有产品,例如;

emit([doc.address.street, doc.address.city, doc.address.state], null)

现在这引出了我的实际问题,我希望能够在一个或多个地址获得产品数量。

我希望能够看到一系列“钥匙”

['W Churchill St','Chicago','IL']
['E Foster Rd','New York','NY']

哪些产品和它们的数量。所以我希望在我的结果中看到。

'Cable' : 2,
'Satellite': 1,
'Free To Air': 1

但是,如果我只指定了这个“密钥”,

['W Churchill St','Chicago','IL']

我希望看到

'Cable' : 2,
'Satellite': 1

如何编写我的视图以适应这种情况?

1 个答案:

答案 0 :(得分:2)

解决这个问题的方法是将我的产品附加到关键字上;

emit([doc.address.street, doc.address.city, doc.address.state, doc.product], null)

然后使用;

?start_key=[street,city,state]&end_key=[street,city,state,{}]&group_level=4

结果:

{"rows":[
    {"key":['W Churchill St','Chicago','IL','Cable'], "value":2},
    {"key":['W Churchill St','Chicago','IL','Satellite'], "value":1}
]}

然后我需要为每个地址重复此查询并对结果求和。