loopback:不同的查询

时间:2015-10-20 06:45:34

标签: loopbackjs

我正在使用Loopback来创建Rest API。需要根据集合中的特定列获取不同的数据。 我在下面尝试过,但它没有工作,而下面的代码片段也在提取重复数据:

this.app.models.location.find(
                {
                    distinct: ("regionName",
                    {state: st})
                }
                ,
                function(err, location){........}

' RegionName'是' location'的财产。收集和我只需要选定状态的数据(状态是位置集合的另一个属性),由' st'表示。 感谢。

4 个答案:

答案 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'}
    });
};