我正在使用Loopback来创建Rest API。需要根据集合中的特定列获取不同的数据。 我在下面尝试过,但它没有工作,而下面的代码片段也在提取重复数据:
this.app.models.location.find(
{
distinct: ("regionName",
{state: st})
}
,
function(err, location){........}
' RegionName'是' location'的财产。收集和我只需要选定状态的数据(状态是位置集合的另一个属性),由' st'表示。 感谢。
答案 0 :(得分:3)
我在以下两个例子中得到答案:
1。)没有查询,只是在"名称" "角色"系列:
var roleCollection = user.app.models.Role.getDataSource().connector.collection(user.app.models.Role.modelName);
roleCollection.distinct( "name",
function(err, records) {
if(err) {
return cb(err);
} else {
return cb(null, records);
}
});
2。)通过查询," name" "角色"集合遗漏任何名为" admin":
的角色var roleCollection = user.app.models.Role.getDataSource().connector.collection(user.app.models.Role.modelName);
roleCollection.distinct( "name", { name: { $ne: 'admin' } },
function(err, records) {
if(err) {
return cb(err);
} else {
return cb(null, records);
}
});
Loopback.io v2.29.1
答案 1 :(得分:2)
我现在正在我的项目中工作。
以下是一些示例代码(以帮助解释您的问题)应该做您需要的...
// Distinct regions
Locations.regions = function (cb) {
console.log('Locations.build');
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'
}
}
);
**注意:这适用于MySQL,但您应该能够修改其他连接器的查询**
答案 2 :(得分:0)
Loopback框架尚未提供不同的功能 使用distinct的Mongo db查询如下:
db.runCommand ( { distinct: "<collection>", key: "<field>", query: { <query>} })
请参阅以下链接:
https://docs.mongodb.org/manual/reference/command/distinct/
答案 3 :(得分:0)
作为进一步参考,这是使用外键过滤器和排序的MongoDB连接器的完整示例:
var mongodb = require('mongodb');
module.exports = function (User) {
User.getDistinctCities = function (countryId, cb) {
var mongoUserCollection = User.getDataSource().connector.collection(User.modelName);
var options = {bool_soft_delete: {$ne: true}};
if (countryId) {
options['countryId'] = new mongodb.ObjectID(countryId);
}
mongoUserCollection.distinct("city", options, function (err, records) {
records.sort();
return cb(err, records);
});
};
User.remoteMethod('getDistinctCities', {
accepts: {arg: 'countryId', type: 'string'},
returns: {arg: 'cities', type: 'array'},
http: {verb: 'get'}
});
};