MongoDB的聚合和投影:总结果数量

3

我正在使用db.collection.aggregate(),使用以下查询。 我得到了正确的结果,其中投影字段正是下面指定的那些。我还想获得符合此条件的文档的总数。

    db.collection.aggregate([
        { $match: { "age": {"$gte": 20, "$lte": 30}} },
        { $lookup: { from: "photos", localField: "post_id", foreignField: "post_id", as: "photos"} },
        { $project: {
            "title": 1,
            "photos.path": 1,
            "age": 1,
            "city": 1,
            "location": 1,
            "post_id": 1,
            "score": { "$meta": "textScore"}
        } },
        { $sort: { score: { $meta: "textScore" } } },
        { $skip: 0 },
        { $limit: 30 },
    ])

经过一些研究,我发现需要添加以下选项:

      { $group: { _id: null, count: { $sum: 1 } } }

但是,添加此内容后,我现在收到的响应如下:

      { "_id" : null, "count" : 400 }

计数是正确的,但我想投影的字段不再存在。是否有一种方法可以在一个结果中获取计数和我想要投影的字段?还是我必须运行两个单独的查询,一个用于计数,另一个用于我想要投影的字段?

后者与前者毫无共同之处。而且后者应该返回正好1个结果,其中“count”是文档的总数。如果没有,则说明您的设置存在更严重的问题。 - Markus W Mahlberg
谢谢Markus。我明白第二个与第一个无关。我编辑了问题,使其更有意义。第二部分是我添加到第一部分的内容。那里的意图是获取符合相同条件的文档总数。 - Tim Hysniu
2个回答

2

是的,这是可能的。可以使用$push访问分组文档。


那个有效,谢谢。你知道我怎么添加分数吗?我正在尝试像其他字段一样:{ ..., score: "$score"},但没有成功。 - Tim Hysniu
在 $project 之后,分数是普通字段,可以像其他字段一样访问。如果出现了什么“错误”,那么故障可能发生在获取分数之前。 - libik

0
将以下内容添加到聚合管道中:
{ $group: { _id: {"title":"$title","age":"$age","city":"$city","location":"$location","post_id":"$post_id","score":"$score"}, count: { $sum: 1 } } })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接