问题描述
有如下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"
}
]
}