【问题标题】:How do I return multiple fields in a MongoDB aggregate query?如何在 MongoDB 聚合查询中返回多个字段?
【发布时间】:2014-10-02 14:19:18
【问题描述】:

我有一组如下所示的 MongoDB 文档:

{
        "_id" : "123",
        "created_by": "bob",
        "date_added": ISODate("2014-08-27T17:43:23Z"),
        "size": "XL",
        "color": "red"
}

我要回答的问题是:每个人最近添加的项目的颜色是什么?

我已经走到这一步了:

db.stuff.aggregate([
    { $group: { _id: { who: "$created_by"}, added: { $max: "$date_added" } } },
])

{ "_id" : { "who" : "bob" }, "added" : ISODate("2014-09-30T07:06:38.135Z") }
{ "_id" : { "who" : "mike" }, "added" : ISODate("2014-09-30T07:10:03.098Z") }
{ "_id" : { "who" : "mary" }, "added" : ISODate("2014-09-30T07:07:27.787Z") }
{ "_id" : { "who" : "john" }, "added" : ISODate("2014-09-30T07:09:51.418Z") }

但是,它只返回用户名和添加文档的日期。我不知道如何让查询也返回颜色。谢谢!

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我认为这对你有用。

    db.stuff.aggregate([ {
        $sort : {
            date_added : -1
        }
    }, {
        $group : {
            _id : {
                who : "$created_by"
            },
            added : {
                $first : "$date_added"
            },
            color : {
                $first : "$color"
            }
        }
    } ]);
    

    【讨论】:

    • 感谢您的帮助。但是,这不会产生正确的结果。将 $first 字段的 $first 运算符更改为 $last 应该会生成相同的文档(因为我只想要最近添加的文档的颜色),但它不会。
    • @jamieb,抱歉我拼错了$sort : {data_added : -1}。应该是$sort : {date_added : -1}
    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2021-02-16
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多