2016-06-14 36 views
1

我想爲使用Loopback和Cloudant連接器的查詢獲取不同的值,但我在文檔中沒有發現任何有關此問題的信息。Cloudant連接器在API Connect/StrongLoop中使用環回的獨特查詢

例如我需要一個查詢來把這個:

[ 
{ 
rating: "★★★★★" 
}, 
{ 
rating: "★★★★★" 
}, 
{ 
rating: "★★★★★" 
}, 
{ 
rating: "★★★★★" 
}, 
{ 
rating: "★★★☆☆" 
}, 
{ 
rating: "★★★☆☆" 
} 
] 

到這一點:

[ 
{ 
rating: "★★★★★" 
}, 
{ 
rating: "★★★☆☆" 
} 
] 

我使用REST API來查詢我的產品模型(以上僅是評級領域的過濾視圖)。如果有某種過濾器可以在不修改服務器的情況下使用,而我只是在文檔中錯過了這一點,那將是最好的選擇。

有什麼辦法,我可以添加一個獨特的領域,如:

/Products?filter[fields][rating]=true?distinct=true 

或者我該怎麼去解決呢?

而且,我已經看到了另一個答案談論加入解決這個(像這樣的MySQL)的遠程方法:

Locations.regions = function (cb) { 
    var ds = Locations.app.datasources.myDS; 
    var sql = "SELECT DISTINCT region FROM Locations ORDER BY region"; // here you write your sql query. 

    ds.connector.execute(sql, [], function (err, regions) { 

    if (err) { 
     cb(err, null); 
    } else { 
     cb(null, regions); 
    } 

    }); 

}; 

Locations.remoteMethod(
    'regions', { 
    http: { 
     path: '/regions', 
     verb: 'get' 
    }, 
    returns: { 
     root: true, 
     type: 'object' 
    } 
    } 
); 

如果這樣的工作,我怎麼會與Cloudant的NoSQL實現它DB連接器?

謝謝!

回答

1

如果你的文件是這樣的:

{ 
    "name": "Star Wars", 
    "year": 1978, 
    "rating": "*****" 
} 

您可以創建MapReduce的視圖,發射doc.rating爲重點,並使用內置的_count減速機:

function(doc) { 
    emit(doc.rating,null); 
} 

當您查詢此視圖與group=truerating的不同值將顯示在數據集中它們的出現次數。

+0

這仍然不完全清楚。看起來這個實現使用了couchdb,而不是使用cloudant連接器的環回。我將在哪裏創建這個新視圖 - 在遠程方法的模型中? –