3 回答

TA貢獻1776條經驗 獲得超12個贊
Mongodb 3.4引入了$facet聚合
它在同一組輸入文檔的單個階段中處理多個聚合管道。
使用$facet和$group可以找到的文檔,$limit并可以獲得總數。
您可以在mongodb 3.4中使用以下聚合
db.collection.aggregate([
{ "$facet": {
"totalData": [
{ "$match": { }},
{ "$skip": 10 },
{ "$limit": 10 }
],
"totalCount": [
{ "$group": {
"_id": null,
"count": { "$sum": 1 }
}}
]
}}
])
即使您可以使用 $countmongodb 3.6中引入的聚合。
您可以在mongodb 3.6中使用以下聚合
db.collection.aggregate([
{ "$facet": {
"totalData": [
{ "$match": { }},
{ "$skip": 10 },
{ "$limit": 10 }
],
"totalCount": [
{ "$count": "count" }
]
}}
])

TA貢獻1890條經驗 獲得超9個贊
時代變了,我相信你能達到什么OP是通過聚合與要求$sort,$group和$project。對于我的系統,我還需要從users集合中獲取一些用戶信息。希望這也可以回答有關此問題。下面是一個聚合管道。最后三個對象(排序,組和項目)是處理總計數,然后提供分頁功能的對象。
db.posts.aggregate([
{ $match: { public: true },
{ $lookup: {
from: 'users',
localField: 'userId',
foreignField: 'userId',
as: 'userInfo'
} },
{ $project: {
postId: 1,
title: 1,
description: 1
updated: 1,
userInfo: {
$let: {
vars: {
firstUser: {
$arrayElemAt: ['$userInfo', 0]
}
},
in: {
username: '$$firstUser.username'
}
}
}
} },
{ $sort: { updated: -1 } },
{ $group: {
_id: null,
postCount: { $sum: 1 },
posts: {
$push: '$$ROOT'
}
} },
{ $project: {
_id: 0,
postCount: 1,
posts: {
$slice: [
'$posts',
currentPage ? (currentPage - 1) * RESULTS_PER_PAGE : 0,
RESULTS_PER_PAGE
]
}
} }
])
- 3 回答
- 0 關注
- 1591 瀏覽
添加回答
舉報