3 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
Mongodb 3.4引入了$facet聚合
它在同一組輸入文檔的單個(gè)階段中處理多個(gè)聚合管道。
使用$facet和$group可以找到的文檔,$limit并可以獲得總數(shù)。
您可以在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貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
時(shí)代變了,我相信你能達(dá)到什么OP是通過聚合與要求$sort,$group和$project。對(duì)于我的系統(tǒng),我還需要從users集合中獲取一些用戶信息。希望這也可以回答有關(guān)此問題。下面是一個(gè)聚合管道。最后三個(gè)對(duì)象(排序,組和項(xiàng)目)是處理總計(jì)數(shù),然后提供分頁功能的對(duì)象。
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 關(guān)注
- 1600 瀏覽
添加回答
舉報(bào)