Javascript Couchbase视图自定义缩减
我不确定问题的标题是否合适,如果您知道更好的,请告诉我;) 我只是这样命名,因为我在想我是否可以用一个定制的reduce函数来解决我的问题 我有两种类型的对象: 车辆:Javascript Couchbase视图自定义缩减,javascript,mapreduce,couchbase,reduce,couchbase-view,Javascript,Mapreduce,Couchbase,Reduce,Couchbase View,我不确定问题的标题是否合适,如果您知道更好的,请告诉我;) 我只是这样命名,因为我在想我是否可以用一个定制的reduce函数来解决我的问题 我有两种类型的对象: 车辆: { "id": "1G1JC5444R7252367", "type": "Vehicle" } 用户: { "company": "companyname", "type": "User", "parts": [ { "company": "companyname", "i
{
"id": "1G1JC5444R7252367",
"type": "Vehicle"
}
用户:
{
"company": "companyname",
"type": "User",
"parts": [
{
"company": "companyname",
"id": "1G1JC5444R7252367",
"active": true
},
{
"company": "companyname",
"id": "1G1135644R7252367",
"active": false
}
]
}
我想要的是一个视图,它将返回某个公司的所有车辆。但是公司只存储在用户对象中
这是我在mapfunction中取得的成绩:
function (doc, meta) {
if(doc.type == 'User'){
if(doc.parts){
Array.prototype.contains = function ( needle ) {
for (var i in this) {
if (this[i] == needle) return true;
}
return false;
};
var ids = new Array(doc.parts.length);
for(var k in doc.parts){
if(doc.parts[k].active) {
if(!vins.contains(doc.parts[k].id)) {
if (doc.parts[k].company && doc.parts[k].id ) {
ids.push(doc.parts[k].id);
emit(doc.parts[k].company, doc.parts[k].id);
}
}
}
}
}
}
}
但这只会将公司作为密钥和车辆id作为值返回给我。所以我得到了一个用户文档。我是否可以在map函数中再次循环浏览文档,并根据ids数组中的ids获取所有车辆
在车辆本身中拯救公司也是不可取的,因为公司不是车辆公司本身,而是零部件公司
感谢转发中的任何帮助。Couchbase视图只能对提供给它的文档进行操作。正如您所发现的,它只能部分实现您想要的功能 但真正的问题不是视图,而是数据模型。您似乎将数据模型设计为使用关系数据库。您尝试的计算是一种联接 文档数据库的一个基本概念是,文档应该表示与某种事件相关的所有信息。这个概念允许文档数据库水平扩展。您不应该担心数据重复。访问的局部性是适当的map reduce数据模型的关键 我会重新设计你的数据模型