您好我正在尝试聚合嵌套对象上的嵌套数组,但是,我无法获得正确的结果。
这就是我的架构的样子;
mongoose.Schema({
parity: {
type: String,
unique: true
},
dataSet: {
oneHour:[{
open: Number,
high: Number,
low: Number,
close: Number,
date: Date,
btcVolume: Number,
_id: false
}],
oneDay:[{
open: Number,
high: Number,
low: Number,
close: Number,
date: Date,
btcVolume: Number,
_id: false
}],
_id: false
},
_id: {
type: String
}
});
这是我用来从集合中获取最新记录的聚合查询
db.stockentities.aggregate( {$match : {parity: "BTC-AMP"}}, {$project: {"dataSet.oneHour": 1}}, {$unwind: "$dataSet.oneHour"}, {$sort: {'date': -1}}, {$limit: 1} ).pretty()
相反,我得到了第一个元素。 (也试过没有项目管道)
{
"_id" : "BTC-AMP",
"dataSet" : {
"oneHour" : {
"open" : 0.00004583,
"high" : 0.00004631,
"low" : 0.00004566,
"close" : 0.00004594,
"btcVolume" : 1.39491494,
"date" : ISODate("2018-01-31T01:00:00Z")
}
}
}
据我所知,结果的架构应该是这样的;
{
"_id" : "BTC-AMP",
"oneHour" : {
"open" : 0.00004583,
"high" : 0.00004631,
"low" : 0.00004566,
"close" : 0.00004594,
"btcVolume" : 1.39491494,
"date" : ISODate("2018-01-31T01:00:00Z")
}
}
所以,我知道我的聚合查询有问题。谢谢你的帮助
答案 0 :(得分:0)
我解决了。需要提供sort
的正确路径并交换展开和项目管道的顺序。
db.stockentities.aggregate( {$match : {parity: "BTC-AMP"}}, {$unwind: "$dataSet.oneHour"} ,{$project: {"oneHour": "$dataSet.oneHour"}}, {$sort: {"oneHour.date": -1}}, {$limit: 1} ).pretty()
给出
{
"_id" : "BTC-AMP",
"oneHour" : {
"open" : 0.00003212,
"high" : 0.00003335,
"low" : 0.0000321,
"close" : 0.00003301,
"btcVolume" : 5.46422374,
"date" : ISODate("2018-03-31T23:00:00Z")
}
}