update for mongodb pagination

This commit is contained in:
Andris Reinman 2018-08-03 16:15:35 +03:00
parent dbb9e9c456
commit 3418390d26
7 changed files with 115 additions and 89 deletions

View file

@ -170,18 +170,21 @@ module.exports = (db, server) => {
filter.tagsview = tagsview;
}
let total = await db.users.collection('addresses').count(filter);
let total = await db.users.collection('addresses').countDocuments(filter);
let opts = {
limit,
query: filter,
fields: {
_id: true,
address: true,
name: true,
user: true,
tags: true,
targets: true
// FIXME: MongoPaging inserts fields value as second argument to col.find()
projection: {
_id: true,
address: true,
name: true,
user: true,
tags: true,
targets: true
}
},
paginatedField: 'addrview',
sortAscending: true

View file

@ -319,7 +319,7 @@ module.exports = (db, server, userHandler) => {
filter.ip = ip;
}
let total = await db.database.collection('authlog').count(filter);
let total = await db.database.collection('authlog').countDocuments(filter);
let opts = {
limit,

View file

@ -130,7 +130,7 @@ module.exports = (db, server) => {
}
: {};
let total = await db.database.collection('dkim').count(filter);
let total = await db.database.collection('dkim').countDocuments(filter);
let opts = {
limit,

View file

@ -125,15 +125,18 @@ module.exports = (db, server) => {
}
: {};
let total = await db.users.collection('domainaliases').count(filter);
let total = await db.users.collection('domainaliases').countDocuments(filter);
let opts = {
limit,
query: filter,
fields: {
_id: true,
alias: true,
domain: true
// FIXME: MongoPaging inserts fields value as second argument to col.find()
projection: {
_id: true,
alias: true,
domain: true
}
},
paginatedField: 'alias',
sortAscending: true

View file

@ -229,26 +229,29 @@ module.exports = (db, server, messageHandler) => {
limit,
query: filter,
fields: {
_id: true,
uid: true,
msgid: true,
'meta.from': true,
hdate: true,
subject: true,
'mimeTree.parsedHeader.from': true,
'mimeTree.parsedHeader.to': true,
'mimeTree.parsedHeader.cc': true,
'mimeTree.parsedHeader.sender': true,
'mimeTree.parsedHeader.content-type': true,
'mimeTree.parsedHeader.references': true,
ha: true,
intro: true,
unseen: true,
undeleted: true,
flagged: true,
draft: true,
thread: true,
flags: true
// FIXME: MongoPaging inserts fields value as second argument to col.find()
projection: {
_id: true,
uid: true,
msgid: true,
'meta.from': true,
hdate: true,
subject: true,
'mimeTree.parsedHeader.from': true,
'mimeTree.parsedHeader.to': true,
'mimeTree.parsedHeader.cc': true,
'mimeTree.parsedHeader.sender': true,
'mimeTree.parsedHeader.content-type': true,
'mimeTree.parsedHeader.references': true,
ha: true,
intro: true,
unseen: true,
undeleted: true,
flagged: true,
draft: true,
thread: true,
flags: true
}
},
paginatedField: 'idate',
sortAscending
@ -664,27 +667,32 @@ module.exports = (db, server, messageHandler) => {
limit,
query: filter,
fields: {
// FIXME: hack to keep _id in response
_id: true,
uid: true,
msgid: true,
mailbox: true,
'meta.from': true,
hdate: true,
subject: true,
'mimeTree.parsedHeader.from': true,
'mimeTree.parsedHeader.sender': true,
'mimeTree.parsedHeader.to': true,
'mimeTree.parsedHeader.cc': true,
'mimeTree.parsedHeader.content-type': true,
'mimeTree.parsedHeader.references': true,
ha: true,
intro: true,
unseen: true,
undeleted: true,
flagged: true,
draft: true,
thread: true,
flags: true
// FIXME: MongoPaging inserts fields value as second argument to col.find()
projection: {
_id: true,
uid: true,
msgid: true,
mailbox: true,
'meta.from': true,
hdate: true,
subject: true,
'mimeTree.parsedHeader.from': true,
'mimeTree.parsedHeader.sender': true,
'mimeTree.parsedHeader.to': true,
'mimeTree.parsedHeader.cc': true,
'mimeTree.parsedHeader.content-type': true,
'mimeTree.parsedHeader.references': true,
ha: true,
intro: true,
unseen: true,
undeleted: true,
flagged: true,
draft: true,
thread: true,
flags: true
}
},
paginatedField: '_id',
sortAscending: false
@ -2470,27 +2478,32 @@ module.exports = (db, server, messageHandler) => {
limit,
query: { user },
fields: {
// FIXME: hack to keep _id in response
_id: true,
mailbox: true,
uid: true,
msgid: true,
'meta.from': true,
hdate: true,
subject: true,
'mimeTree.parsedHeader.from': true,
'mimeTree.parsedHeader.sender': true,
'mimeTree.parsedHeader.to': true,
'mimeTree.parsedHeader.cc': true,
'mimeTree.parsedHeader.content-type': true,
'mimeTree.parsedHeader.references': true,
ha: true,
intro: true,
unseen: true,
undeleted: true,
flagged: true,
draft: true,
thread: true,
flags: true
// FIXME: MongoPaging inserts fields value as second argument to col.find()
projection: {
_id: true,
mailbox: true,
uid: true,
msgid: true,
'meta.from': true,
hdate: true,
subject: true,
'mimeTree.parsedHeader.from': true,
'mimeTree.parsedHeader.sender': true,
'mimeTree.parsedHeader.to': true,
'mimeTree.parsedHeader.cc': true,
'mimeTree.parsedHeader.content-type': true,
'mimeTree.parsedHeader.references': true,
ha: true,
intro: true,
unseen: true,
undeleted: true,
flagged: true,
draft: true,
thread: true,
flags: true
}
},
paginatedField: '_id',
sortAscending
@ -3135,7 +3148,7 @@ function getFilteredMessageCount(db, filter, done) {
return tools.getMailboxCounter(db, filter.mailbox, false, done);
}
db.database.collection('messages').count(filter, (err, total) => {
db.database.collection('messages').countDocuments(filter, (err, total) => {
if (err) {
return done(err);
}
@ -3144,7 +3157,7 @@ function getFilteredMessageCount(db, filter, done) {
}
function getArchivedMessageCount(db, user, done) {
db.database.collection('archived').count({ user }, (err, total) => {
db.database.collection('archived').countDocuments({ user }, (err, total) => {
if (err) {
return done(err);
}

View file

@ -199,26 +199,33 @@ module.exports = (db, server, userHandler) => {
filter.tagsview = tagsview;
}
let total = await db.users.collection('users').count(filter);
let total = await db.users.collection('users').countDocuments(filter);
let opts = {
limit,
query: filter,
fields: {
// FIXME: hack to keep _id in response
_id: true,
username: true,
name: true,
address: true,
tags: true,
storageUsed: true,
targets: true,
quota: true,
activated: true,
disabled: true,
password: true,
encryptMessages: true,
encryptForwarded: true
// FIXME: MongoPaging inserts fields value as second argument to col.find()
projection: {
_id: true,
username: true,
name: true,
address: true,
tags: true,
storageUsed: true,
targets: true,
quota: true,
activated: true,
disabled: true,
password: true,
encryptMessages: true,
encryptForwarded: true
}
},
// _id gets removed in response if not explicitly set in paginatedField
paginatedField: '_id',
sortAscending: true
};

View file

@ -151,7 +151,7 @@ function getMailboxCounter(db, mailbox, type, done) {
query[type] = true;
}
db.database.collection('messages').count(query, (err, sum) => {
db.database.collection('messages').countDocuments(query, (err, sum) => {
if (err) {
return done(err);
}