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 关注
- 1551 浏览
添加回答
举报