MongoDB:从我的回调中访问count()

时间:2018-01-03 05:53:31

标签: mongodb

我使用skip()和limit()给我一个充满匹配记录的页面。我想得到count [忽略skip()和limit()],这样我就可以知道返回的匹配总数,但是跳过和限制。这将使我知道存在多少页记录。

显然,您可以使用以下语法执行此操作:https://docs.mongodb.com/manual/reference/method/cursor.count/#cursor.count

以下是我的路由器代码。 transactions.length只是返回的数字 应用的跳过和限制,使用长度,页数始终为1.

相反,我需要可用于回调的计数。我怎样才能获得那里的计数?

Transactions.getJoinedTransactions(
    global.user.firmId, page, pageSize, billerId, matterId,
    function(err, transactions) {

       if (err)
       console.log(err);

       <-- I want the count here.

       let pageCount = Math.floor(transactions.length / pageSize) + 
                       ( (transactions.length % pageSize) != 0 ? 1 : 0 );
       console.log("Matches for this page = " + transactions.length);
       console.log("Page size = " + pageSize);
       console.log("Page count = " + pageCount);

       etc.,

这是数据库调用。可能没有必要提问,但以防万一...

exports.getJoinedTransactions = function(firmId, page, pageSize, billerId, matterId, cb) {


...

Transactions.aggregate([
    { $sort: { date: -1 } },
    {
        $match: query 
    },

    ...


]).skip(numberToSkip).limit(pageSize).exec( function(err, transactions) {

    cb(err, transactions);

});

1 个答案:

答案 0 :(得分:0)

由于我需要交易页面所有页面中所有交易的计数,我只是全部交易而没有skip()和limit()。

我通过Math.floor(transactions.length / pageCount)计算了pageCount(如果长度%pageSize!= 0,则为+ 1)。

然后,我只是在整个数组上执行了一个slice()来获取我需要的那些。然后,我将err,slicedTransactions和pageCount发送给我的回调。

似乎没问题。不过,我有一种感觉,对于大型数据集,使用所有记录而不是页面填充可能会导致明显的性能损失。