c# - mongodb C# 使用查找和方面进行计数
问题描述
我有这个代码:
var pipeline = new BsonDocument[]
{
new BsonDocument("$lookup",
new BsonDocument
{
{ "from", "comments" },
{ "let",
new BsonDocument("id", "$_id") },
{ "pipeline",
new BsonArray
{
new BsonDocument("$match",
new BsonDocument("$expr",
new BsonDocument("$eq",
new BsonArray
{
"$postId",
"$$id"
}))),
new BsonDocument("$sort", new BsonDocument("time", -1)),
new BsonDocument("$limit", Filters.defaultCommentsLimitPerPost),
}
},
{ "as", "comments" }
}),
new BsonDocument("$limit", 3),
new BsonDocument("$skip", page - 1),
};
var pipeline = PipelineDefinition<Post, Post>.Create(Filters.GetJoinComments(page));
var result = await collectionPosts.Aggregate(pipeline).ToListAsync();
我怎样才能得到所有文档的总数,忽略 $limit 和 $skip?
邮寄文件的示例:
{"_id":null,"time":{"$numberLong":"637396703347196085"},"text":"some text","totalCommentsCount":{"$numberInt":"0"},"likes":{"$numberInt":"0"},"category":{"$numberInt":"0"},"videoUrl":null}
评论文档的示例:
{"_id":{"$oid":"5f9dbaf79d10c42f64f46f53"},"text":"a comment","time":{"$numberLong":"637397765330317024"},"likes":{"$numberInt":"0"},"postId":{"$oid":"5f9089dd818de4309403d21b"}}
解决方案
非常感谢您尝试的查询。
我还添加了
$sort
通过_id osrt。如果不需要,请删除排序$group
将所有文档分组到data
(因为_id:null
)。同时我们得到总数。$unwind
解构data
数组- 我觉得你用这个来分页,对吧?如果是这样,您需要保留
$sort
并且首先应该是$skip
,以下应该是$limit
我提到的
和工作查询。
db.post.aggregate([
{
$lookup: {
from: "comment",
let: {
"pId": "$_id"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$postId",
"$$pId"
]
}
}
}
],
as: "comments"
}
},
{
$sort: { _id: 1 }
},
{
$group: {
_id: null,
data: { $push: "$$ROOT" },
totalRecords: { $sum: 1 }
}
},
{ $unwind: "$data" },
{ $skip: 1 },
{ $limit: 1 }
])
工作Mongo游乐场
推荐阅读
- swift - 仅当令牌不为零时如何执行segue swift 5
- python-3.x - Python从数据框列中提取未知字符串
- ios - LLDB 如何在 OC 中使用文件定义的宏
- sql-server - 使用另一个表中的列名来定义新表的名称
- html - 如何在Angular Project中调用浏览器后退按钮
- sql - 连接方法上的 SQL Server 性能
- javascript - 为什么当我们使用字符值而不是数字定义一组数组属性时,数组的长度显示为零?
- nginx - 能够从 nginx 入口控制器中的 https 重定向中排除一页
- javascript - 行中不存在 prop depto_modules.length,我该如何解决?
- groovy - 是否有任何简单有效的方法来编写我用来将日期和时间转换为 Groovy 中的时间戳的代码块