【问题标题】:Sails.JS - Get the count of the number of objects/rows in the databaseSails.JS - 获取数据库中对象/行数的计数
【发布时间】:2014-01-17 12:56:11
【问题描述】:

在 Sails.js 中,通过生成模型和控制器为您完成了很多工作。控制器允许通过 API 访问数据。它允许通过传递 start/skip/offset 和 take/limit 来轻松进行分页。但是为了让我确定一个集合的最大页数,我需要知道一个集合中有多少项目。

我尝试在生成器中扩展蓝图以公开新的 API 方法 count 并创建计数操作。根据Waterline documentationcount是可以在模型上调用的动作。当我打电话给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 }

注意:我使用的是自定义适配器,但我为适配器创建了count 方法。

【问题讨论】:

  • User.count(yourCallbackFunction);
  • 当然是基于回调的.. 我不知道我在想什么。这也解释了它返回的内容......可链接的User 对象。
  • 我没用过sails,我觉得应该是User.count(function (err, num) { console.log(num); });如果你定义了一个计数方法,它应该是:count = function(callback) { User.count(callback) };
  • 在您的帮助下,我现在知道了。如果您将信息放在答案中,我会将其标记为正确的。
  • 我想看看你如何以及在哪里将 count 方法暴露给sails,你能写出答案吗?

标签: javascript node.js sails.js waterline


【解决方案1】:

现在您可以使用sails installable hook通过blueprint api方法实现计数功能。

我在这个答案中解释了它: Get total count in Sails JS blueprint API

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

【讨论】:

    【解决方案2】:

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

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

    用另一种方法包装 User.count:

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

    【讨论】:

    • 有没有办法将查询传递给计数函数?用例是获取集合中满足特定条件的项目子集的计数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2018-10-03
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多