mongodb 嵌套文档 统计每个分类最新日期或者数组里的某个字段最大值的记录如何实现

问题描述

有如下collection, 我需要根据name quote.sign 字段去分组统计,根据last_updated时间去取最新的一条记录,或者根据quote.price在整个表里的最大值将数据按现有格式取出来。

{
    "_id" : ObjectId("5bfd20dc8e01a44a64c9a455"),
    "name" : "test",
    "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
    "quote" : [ 
        {
            "price" : 0.00362,
            "volume" : 172.952,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "CNY"
        }, 
        {
            "price" : 0.0000346,
            "volume" : 1.6559,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USD"
        }, 
        {
            "price" : 0.00369,
            "volume" : 176.591,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USDT"
        }
    ]
}

问题出现的环境背景及自己尝试过哪些方法

现在使用以下方式来查找

查找到的数据是这样子的:比如数据

{
    "_id" : {
        "name" : "test"
    },
    "last_updated" : [ 
        ISODate("2018-11-27T10:47:03.000Z"),
        ISODate("2018-11-27T10:48:03.000Z")
    ],
    "quote" : [ 
        {
            "price" : 0.00362,
            "volume" : 172.952,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "CNY"
        }, 
        {
            "price" : 0.0000346,
            "volume" : 1.6559,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USD"
        }
    ]
}

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

db.getCollection('test').aggregate([{
    $unwind: '$quote'
},{ 
    "$group" : { 
        "_id" : {
            "name" : "$name", 
        }, 
        "price" : { 
            "$max" : "$quote.price" 
        }, 
        "last_updated" : { 
            "$push" : "$last_updated" 
        }, 
        "quote" : { 
            "$push" : "$quote" 
        } 
    } 
}, { 
    "$project" : {
        "name" : "$_id.name", 
        "last_updated" : 1, 
        "quote" : 1 
    } 
},{ 
    "$sort" : { 
        "quote.volume" : -1 
    } 
}])

你期待的结果是什么?实际看到的错误信息又是什么?

我希望查到的每条数据是这样子的:

{
    "_id" : ObjectId("5bfd20dc8e01a44a64c9a455"),
    "name" : "test",
    "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
    "quote" : [ 
        {
            "price" : 0.00362,
            "volume" : 172.952,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "CNY"
        }, 
        {
            "price" : 0.0000346,
            "volume" : 1.6559,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USD"
        }, 
        {
            "price" : 0.00369,
            "volume" : 176.591,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USDT"
        }
    ]
},
{
    "_id" : ObjectId("5bfd20dc8e01a44a64c9a455"),
    "name" : "test1",
    "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
    "quote" : [ 
        {
            "price" : 0.00362,
            "volume" : 172.952,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "CNY"
        }, 
        {
            "price" : 0.0000346,
            "volume" : 1.6559,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USD"
        }, 
        {
            "price" : 0.00369,
            "volume" : 176.591,
            "last_updated" : ISODate("2018-11-27T10:47:03.000Z"),
            "sign" : "USDT"
        }
    ]
}
阅读 2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题