我使用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);
});
答案 0 :(得分:0)
由于我需要交易页面和所有页面中所有交易的计数,我只是全部交易而没有skip()和limit()。
我通过Math.floor(transactions.length / pageCount)计算了pageCount(如果长度%pageSize!= 0,则为+ 1)。
然后,我只是在整个数组上执行了一个slice()来获取我需要的那些。然后,我将err,slicedTransactions和pageCount发送给我的回调。
似乎没问题。不过,我有一种感觉,对于大型数据集,使用所有记录而不是页面填充可能会导致明显的性能损失。