Sails.JS – 获取数据库中的对象/行数

在Sails.js中,通过生成模型和控制器为您完成了大量的工作。 控制器允许通过API访问数据。 它可以通过传递开始/跳过/偏移和取/限制来实现简单的分页。 但为了让我确定一个集合的最大页面,我需要知道集合中有多less个项目。

我试图在生成器中扩展蓝图以公开新的API方法count并创build计数操作。 根据Waterline文档 , count是一个可以在模型上调用的动作。 当我调用User.count() ,我得到这个:

 { _context: { identity: 'user', adapter: { syncable: false, defaults: [Object], registerCollection: [Function], create: [Function], find: [Function], update: [Function], destroy: [Function], count: [Function], identity: 'odata', globalId: 'odata', config: [Object] }, attributes: {}, _cast: { _types: [Object] }, _schema: { context: [Circular], schema: [Object], hasSchema: true }, _validator: { validations: {} }, _callbacks: { beforeValidation: [Object], afterValidation: [Object], beforeUpdate: [Object], afterUpdate: [Object], beforeCreate: [Object], afterCreate: [Object], beforeDestroy: [Object], afterDestroy: [Object] }, _instanceMethods: {}, autoPK: true, autoCreatedAt: true, autoUpdatedAt: true, hasSchema: true, migrate: 'alter', _model: { [Function] extend: [Function], inject: [Function], __super__: {} }, _transformer: { _transformations: {} }, _tableName: 'user', _adapterDefs: [ [Object] ], _adapter: { adapter: [Object], adapterDefs: [Object], query: [Circular], collection: 'user' }, syncable: [Function], defaults: [Function], registerCollection: [Function], config: [Function], findOneById: [Function: dynamicMethod], findOneByIdIn: [Function: dynamicMethod], findOneByIdLike: [Function: dynamicMethod], findById: [Function: dynamicMethod], findByIdIn: [Function: dynamicMethod], findByIdLike: [Function: dynamicMethod], countById: [Function: dynamicMethod], countByIdIn: [Function: dynamicMethod], countByIdLike: [Function: dynamicMethod], idStartsWith: [Function: dynamicMethod], idContains: [Function: dynamicMethod], idEndsWith: [Function: dynamicMethod], findOneByCreatedAt: [Function: dynamicMethod], findOneByCreatedAtIn: [Function: dynamicMethod], findOneByCreatedAtLike: [Function: dynamicMethod], findByCreatedAt: [Function: dynamicMethod], findByCreatedAtIn: [Function: dynamicMethod], findByCreatedAtLike: [Function: dynamicMethod], countByCreatedAt: [Function: dynamicMethod], countByCreatedAtIn: [Function: dynamicMethod], countByCreatedAtLike: [Function: dynamicMethod], createdAtStartsWith: [Function: dynamicMethod], createdAtContains: [Function: dynamicMethod], createdAtEndsWith: [Function: dynamicMethod], findOneByUpdatedAt: [Function: dynamicMethod], findOneByUpdatedAtIn: [Function: dynamicMethod], findOneByUpdatedAtLike: [Function: dynamicMethod], findByUpdatedAt: [Function: dynamicMethod], findByUpdatedAtIn: [Function: dynamicMethod], findByUpdatedAtLike: [Function: dynamicMethod], countByUpdatedAt: [Function: dynamicMethod], countByUpdatedAtIn: [Function: dynamicMethod], countByUpdatedAtLike: [Function: dynamicMethod], updatedAtStartsWith: [Function: dynamicMethod], updatedAtContains: [Function: dynamicMethod], updatedAtEndsWith: [Function: dynamicMethod] }, _method: [Function], _criteria: {}, _values: null } 

注意:我正在使用自定义适配器,但是我已经为适配器创build了一个count方法。

要获取用户集合中对象的数量:

 User.count(function (err, num) { if(err) { return console.log(err); } console.log(num); }); 

在另一个方法中包装User.count:

 yourMethod = function (callback) { User.count(callback); } 

现在你可以使用sails安装钩子来通过蓝图API方法来实现计数function。

我在这个答案中解释了它: 在Sails JS蓝图API中获取总数

您还可以将查询传递给计数函数,以获取集合中满足一定条件的项目子集的计数。